某行上数据最大的元素,在元素所在列,该元素同时也是最小,这样的点就是鞍点。不过要考虑特殊情况,就是全是同一个数字的时候,这时没有鞍点。
#include <stdio.h> int isFind(int data[20][20] , int m , int n) { int maxH , i , j , line , flag , k; for(i = 0 ; i < m ; i++) { maxH = data[i][0]; flag = 0; line = 0; for(j = 0 ; j < n ; j++ ) { if(data[i][j] > maxH) { maxH = data[i][j]; line = j; } } for(k = 0 ; k < m ; k++) { if(data[k][line] <= maxH && k != i)//特殊情况处理,如上图全是1的情况,k!=i要保证值相等时不是本身 { flag = -1; break; } } if(flag == 0) { break; } } if(flag == -1) { return -1; } else { return maxH; } } void input(int m , int n , int data[20][20]) { int i , j; for(i = 0 ; i < m ; i++) { for(j = 0; j < n ; j++) { scanf("%d",&data[i][j]); } } } int main() { int data[20][20]; int m , n ,i = 1; while(scanf("%d %d",&m, &n) != EOF) { int point; if(m == 0 && n == 0) { break; } input(m,n,data); point = isFind(data,m,n); if(point != -1) { printf("Case %d: %d\n",i,point); } else { printf("Case %d: No\n",i); } i++; } return 0; }