AcWing 3708. 求矩阵的鞍点
原题链接
简单
作者:
Timmmm
,
2024-01-24 14:16:23
,
所有人可见
,
阅读 50
枚举
#include <bits/stdc++.h>
using namespace std;
int n, m; // n行m列
int main() {
cin >> n >> m;
int arr[n][m]; // n行m列二维数组来存矩阵
int maxRow[n]; // 存每一行的最大值
int flag = 0; // 0表示一个鞍点都没有
// 输入矩阵并找出每一行的最大值
for (int i = 1; i <= n; i ++ ) {
int max = -1;
for (int j = 1; j <= m; j ++ ) {
cin >> arr[i][j];
if(arr[i][j] > max)
max = arr[i][j];
}
maxRow[i] = max;
}
// 遍历二维数组,找到符合要求的数
for (int i = 1; i <= n; i ++ ) {
for (int j = 1; j <= m; j ++ ) {
if (arr[i][j] == maxRow[i]) { // 如果当前值是这一行最大的,就可能是鞍点
for (int k = 1; k <= n; k ++ ) { // 扫描其列看是不是最小的
if(arr[k][j] < arr[i][j]) // 如果该列有更小的值,说明该行没有鞍点
break;
if(k == n) { // 如果到该列最后一个了,说明符合要求了
cout << i << " " << j << " " << arr[i][j] << endl; // 输出鞍点坐标
flag = 1; // 有鞍点了,不用输出no了
}
}
}
}
}
if (flag == 0)
cout << "NO";
return 0;
}