鞍点:某个矩阵中的某个元素,在该行中最大,在该列中最小;一个矩阵中也可能没有鞍点,所以一个矩阵中存在鞍点也只能只有一个。
#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; }