云分享 Share

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

1476455392126526.png

代码如下

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