鞍点:某个矩阵中的某个元素,在该行中最大,在该列中最小;一个矩阵中也可能没有鞍点,所以一个矩阵中存在鞍点也只能只有一个。
#include <iostream>
#include<cstdio>
using namespace std;
int getSaddlePoint(int *x,int *y,int (*a)[5],int m,int n) {
int max,i,j,k,flag;
for(i=0;i<m;i++) {
max=0;
flag=1;
for(j=1;j<n;j++) {
if(a[i][j]>a[i][max])
max=j;//max记录第i行最大值的列数,找出第i行中的最大元素的位置a[i][max]
}
for(k=0;k<n;k++)
if(a[i][max]==a[i][k] && max!=k) {
flag=0;
break;
}
if(flag==1)
for(k=0;k<m;k++) { //判断a[i][max]是否是本列中最小的
if(a[k][max]<=a[i][max] &&k!=i) {
flag=0;
break;
}
}
if(flag==1) {//找到鞍点,用x、y返回,程序结束返回
*x=i;
*y=max;
return 1;
}
}
return 0;
}
int main() {
int a[5][5],i,j,x,y;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cin>>a[i][j];
if(getSaddlePoint(&x,&y,a,5,5))
cout<<"SaddlePoint is at "<<x+1<<" "<<y+1;
else
cout<<"NO SaddlePoint"<<endl;
return 0;
}