某行上数据最大的元素,在元素所在列,该元素同时也是最小,这样的点就是鞍点。不过要考虑特殊情况,就是全是同一个数字的时候,这时没有鞍点。

#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;
}