7-4 找鞍點 (20分)
一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。
輸入格式:
輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。
輸出格式:
輸出在一行中按照“行下標 列下標”(下標從0開始)的格式輸出鞍點的位置。如果鞍點不存在,則輸出“NONE”。題目保證給出的矩陣至多存在一個鞍點。
輸入樣例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
輸出樣例1:
2 1
輸入樣例2:
2
1 7
4 1
輸出樣例2:
NONE
代碼:
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<vector<int>>a;
int n,x;
cin>>n;
if(n==1){cout<<"0 0";return 0;}
for (int i = 0; i < n; ++i) {
vector<int>tmp;
for (int j = 0; j < n; ++j) {
cin>>x;
tmp.push_back(x);
}
a.push_back(tmp);
}
int mx=0,mn=100,row,line,tmp;
for (int p = 0; p < n; ++p)
{
mx=0,mn=100,row=-1,line=-1;
int k,l;
for (k = 0; k < n; ++k)
{
if(mx<=a[p][k])
{
mx=a[p][k];
line=k;
}
}
//求出行最大,p,line爲其下標
for (l = 0; l < n; ++l)
{
if (mn >= a[l][line])
{
mn=a[l][line];
row=l;
}
}
//求出列最小,row,line爲其下標
if(p==row){
cout<<row<<" "<<line<<endl;
return 0;
}
//判斷row和p是否相等
}
cout<<"NONE"<<endl;
return 0;
}