原题:若在矩阵A[n*n]中存在一个元素a[i-1][j-1]满足a[i-1][j-1]是第 i 行元素中最小且又是第 j 列元素中的最大值,则称此元素为该矩阵的一个马鞍点.试设计一个求矩阵所有马鞍点的算法.
分析:用数组S[n]存储某一行(如第 i 行, i = 1--m)的元素值最小的元素的下标, c 表示此行的元素值等于最小的元素的个数(元素等于最小值的元素可能不止一个),对每个元素值最小的元素再验证是否是所在列的元素值最大的元素,如是则为马鞍点,将其输出.
#include<iostream>
#include<fstream>
#include<time.h>
#include<iomanip>//控制输出格式的头文件
#include<stdlib.h>
#define N 3//列数
#define M 3//行数
#define ElemType int
using namespace std;
ElemType CreateArray(ElemType array[M][N]);//函数原型声明
void SaddlePoint(ElemType array[M][N], int m, int n);//函数原型声明
int main()
{
ElemType array[M][N];
CreateArray(array);
SaddlePoint(array, M, N);
cout<<endl<<endl;
return 1;
}
ElemType CreateArray(ElemType array[M][N])
{//生成一个数据元素随机生成的二维数