题目描述
求一个具有 n 行 n 列矩阵的马鞍点(矩阵中某一元素,是所在行中的最小值,同时又是所在列中的最大值,则称该矩阵有马鞍点,该元素的值称为马鞍点的值)。
输入
第一行,一个数 N;接下来 N 行,每行 N 个数。
输出
马鞍数所在的行列,用一个空格隔开,如果有多个,请分行输出。
样例数据
输入
5 5 6 7 8 9 4 5 6 7 8 3 4 5 2 1 2 3 4 9 0 1 2 5 4 8
输出
1 1
提示
【样例解释】
样例中的矩阵第 1 行第 1 列有一马鞍点,其值为 5。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;//行数
cin>>n;
int a[n+1][n+1];//数列
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];//输入数列
for(int i=1;i<=n;i++)//控制行数
{
int tot=2147483647,wz;
for(int j=1;j<=n;j++) if(a[i][j]<tot)//找行中最小值
{
tot=a[i][j];
wz=j;
}
bool bz=1;
for(int j=1;j<=n;j++)//判断是否是列中最大值
{
if(tot<a[j][wz])//如果不是则标志为假,并退出
{
bz=0;
break;
}
}
if(bz) printf("%d %d\n",i,wz);//如果是就输出
}
return 0;
}