#include <stdio.h>
#define ROWS 4
#define COLS 5
//寻找马鞍点, 在一个二位数组上,每行最小值存为Min[i],每列最大值存为Max[j]
//若元素A[i][j]即在Min[i]又在Max[j],则是马鞍点。
void findSaddlePoint(int A[4][5],int m, int n){
int i,j;
int Max[5],Min[4];
//计算出每行最小的元素,存入Min[4]的数组中
for(i = 0; i < m ; i++){
int min = A[i][0];
for (j = 0; j < n; j++)
{
if(A[i][j] < min) min = A[i][j];
}
Min[i] = min;
}
//计算出每列最打的元素,存入Max[5]的数组中
for(j = 0; j < n ; j++){
int max = A[0][j];
for (i = 0; i < m; i++)
{
if(A[i][j] > max) max = A[i][j];
}
Max[j] = max;
}
//最后双重循环判断马鞍点
for(i=0;i<m;i++)
for(j=0;j<n;j++)
//if(A[i][j] == Min[i] && A[i][j] == Max[j])
if(Min[i]==Max[j])
printf("saddlePoint : (%d,%d) \n",i,j);
}
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3, 4, 3},
{4, 5, 3, 7 ,3 },
{7, 8, 3, 10, 3},
{6, 8, 3, 10, 3},
};
findSaddlePoint(matrix,4, 5);
return 0;
}