問題 F: 鞍點定位
在一個二維矩陣中,如果某個位置的數值是該行最大值,同時也是該列最小值,我們則稱該位置是矩陣的鞍點。鞍點在工業控制,建築力學等方面有着廣泛應用。鞍點可能有多個,也可能沒有。
請編寫程序找出矩陣的鞍點。
輸入
第一行輸入T表示有T個測試實例
第二行輸入兩個參數A和B,分別表示矩陣的行數和列數
第三行輸入二維矩陣的數據,假定數據都是正整數
以此類推輸入下個實例
輸出
輸出鞍點所在的行號和列號,行號和列號都是從0開始編號。
本題目無需考慮存在多個鞍點的情況,假設如果有鞍點則只有唯一個
如果鞍點不能存在則輸出-1
樣例輸入
2
3 3
11 77 33
44 66 55
22 88 99
4 2
22 11
33 44
55 66
11 88
樣例輸出
1 1
-1
#include<stdio.h>
int main()
{
int n,a,b,ar[10][10],max[10],min[10],i,j,k,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=0;
scanf("%d %d",&a,&b);
for(j=0;j<a;j++)
for(k=0;k<b;k++)
scanf("%d",&ar[j][k]);
/*先找到每行的最大值每列的最小值*/
for(j=0;j<a;j++)
{
max[j]=ar[j][0];
for(k=0;k<b;k++)
{
if(ar[j][k]>max[j])
max[j]=ar[j][k];
}
}
for(k=0;k<b;k++)
{
min[k]=ar[0][k];
for(j=0;j<a;j++)
{
if(min[k]>ar[j][k])
min[k]=ar[j][k];
}
}
/*找到最大值和最小值的相等的地方*/
for(j=0;j<a;j++)
{
for(k=0;k<b;k++)
{
if(min[k]==max[j])
{
t++;
printf("%d %d\n",j,k);
goto loop;//巧妙運用loop
}
}
}
printf("-1\n");
loop:;
}
return 0;
}