描述
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 912 4 7 8 1010 5 6 9 118 6 4 7 215 10 11 20 25
格式
输入格式
输出格式
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出”not found”。
样例
输入样例
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
输出样例
4 1 8
限制
时间限制:1000 ms
内存限制:65536 KB
代码
#include<stdio.h>
int main()
{
int cur[5][5];
int ans;
int i,j,f,m,n,y,h,l;
int flag;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%d", &cur[i][j]);
}
}
/*int a, b;
for (a = 0; a < 5; a++)
{
for (b = 0; b < 5; b++)
{
printf("%d ",cur[a][b]);
if (b == 4)
{
printf("\n");
}
}
}
*/
int max_x,min_y;
for (m = 0; m < 5; m++)
{
flag = 0;
max_x = cur[m][0];
y = 0;
for (n = 0; n < 5; n++)
{
if (cur[m][n] >max_x)
{
max_x = cur[m][n];
y = n;
}
}
int t;
min_y = max_x;
for (t = 0; t < 5; t++)
{
if (cur[t][y] <min_y)
{
//min_y = cur[t][y];
goto a;
}
}
h = m+1; l = y+1;
ans = min_y;
goto b;
a:
flag = 1;
}
if (flag == 1)
{
printf("not found\n");
return 0;
}
b:
printf("%d %d %d\n",h,l,ans);
return 0;
}
