鞍点:在行中最大,列中最小的数字
样例输入:
4 5 9
2 3 8
6 7 10
样例输出:
8
代码实现:
#include<stdio.h>
const int M=3; //数组的行数
const int N=3; //数组的列数
void saddlePoint(int mat[][M],int m,int n,int *maxRow,int *maxCol); //求解鞍点
void saddlePoint(int mat[][M],int m,int n,int *maxRow,int *maxCol){
int i,j;
int maxValue;
int minValue;
*maxRow=0;*maxCol=0;
for(i=0;i<m;i++){
maxValue=mat[i][0];
for(j=1;j<n;j++){
if(maxValue<mat[i][j]){
maxValue=mat[i][j];
*maxRow=i;
*maxCol=j;
}
}
minValue=mat[0][*maxCol];
int minRow=0;
for(j=1;j<m;j++){
if(minValue>mat[j][*maxCol]){
minValue=mat[j][*maxCol];
minRow=j;
}
}
if(minRow==(*maxRow)){ //判断列中的最小数是否等于行最大数
return;
}
}
}
int main(){
int arr[M][N]={{4,5,9},{2,3,8},{6,7,10}};
int maxR,maxC;
saddlePoint(arr,M,N,&maxR,&maxC);
printf("%d",arr[maxR][maxC]);
}