给定一个 n×m的整数矩阵,行的编号为 1∼n,列的编号为 1∼m,求矩阵中的所有鞍点。
鞍点,即该位置上的元素在该行上最大,在该列上最小。
有可能有多个鞍点,也可能没有鞍点。
输入格式
第一行包含两个整数 n,m。
接下来 n行,每行包含 m 个整数。
输出格式
输出所有鞍点的坐标和值。
输出优先级,整体从上到下,同行从左到右。
如果不存在鞍点,则输出 NO
。
数据范围
1≤n,m<10
矩阵元素取值范围 [1,9][1,9]。
输入样例:
3 4
1 2 3 4
1 2 3 4
1 2 3 4
输出样例:
1 4 4
2 4 4
3 4 4
#include<iostream>
using namespace std;
/*
思想:直接把列,行的最小值,最大值求出来
*/
int n,m;
int p[12][12];
int hang[12];//储存行最大
int le[12];//列最小
int main()
{
cin >> n>>m;
for(int i = 1; i <= n;i++)
{
for(int j = 1; j <=m; j++)
{
cin >> p[i][j];
}
}
//算行最大
for(int i = 1; i <= n; i++)
{
int res = 0;
for(int j = 1; j<= m; j++)
{
if(p[i][j]>hang[i])hang[i]=p[i][j];
}
}
//算列最小
for(int j = 1; j <= m;j++)
{
int res = 100;
for(int i = 1; i <= n; i++){
if(p[i][j]<res)
{
le[j]=res = p[i][j];
}
}
}
int k = 1;
for(int i = 1; i <= n;i++)
{
for(int j = 1; j <=m; j++)
{
if(p[i][j]==hang[i]&&p[i][j]==le[j]){
cout<<i<<" "<<j<<" "<<p[i][j]<<"\n";
k = 0;
}
}
}
if(k)
{
cout<<"NO";
}
return 0;
}