矩陣題目之//鞍點定位

問題 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章