求矩阵的马鞍点
题目描述
给定一个 n×m的整数矩阵,行的编号1~n,列的编号为1~m求矩阵中的所有鞍点。鞍点,即该位置上的元素在该行上最大,在该列上最小。
有可能有多个鞍点,也可能没有鞍点。
输入格式
第一行包含两个整数 n,m。接下来 n行,每行包含 m个整数。
输出格式
输出所有鞍点的坐标和值。
输出优先级,整体从上到下,同行从左到右。
如果不存在鞍点,则输出 NO。
数据范围
1 ≤ n , m < 10 ,矩阵元素取值范围 [1,9]。
代码
#include <iostream>
using namespace std;
int a[20][20] , n , m , cnt;
int main()
{
cin >> n >> m ;
for (int i = 1 ; i <= n ; i ++)
for (int j = 1 ; j <= m ; j ++)
cin >> a[i][j];
for (int i = 1 ; i <= n ; i ++)
for (int j = 1 ; j <= m ; j ++)
{
bool is_col = true , is_row = true;
for (int k = 1 ; k <= n ; k ++)
if (a[k][j] < a[i][j]) is_col = false;
for (int k = 1 ; k <= m ; k ++)
if (a[i][k] > a[i][j]) is_row = false;
if (is_row && is_col)
{
cnt ++ ;
printf ("%d %d %d\n" , i , j , a[i][j]);
}
}
if (cnt == 0) puts("NO");
return 0;
}