鞍点
描述
找一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。鞍点最多一个,也可能不存在。
输入
第一行是二维数组的行数和列数(行和列的数目均不大于100),之后为二维数组。
输出
如果存在鞍点,输出鞍点所在的行、列及其值,每个数后一个空格;如果不存在,输出"N"
输入样例 1
3 3 11 22 33 99 33 55 44 55 66
输出样例 1
0 2 33
提示
HINT 时间限制:200ms 内存限制:64MB
#include <iostream>
#include <vector>
using namespace std;
int main() {
int rows, cols;
cin >> rows >> cols;
vector<vector<int>> matrix(rows, vector<int>(cols));
// 读入二维数组
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
cin >> matrix[i][j];
}
}
bool foundSaddlePoint = false;
// 遍历每一行
for (int i = 0; i < rows; ++i) {
// 找到当前行的最大值
int maxInRow = matrix[i][0];
int colIndex = 0;
for (int j = 1; j < cols; ++j) {
if (matrix[i][j] > maxInRow) {
maxInRow = matrix[i][j];
colIndex = j;
}
}
// 检查这个最大值是否为对应列的最小值
bool isSaddlePoint = true;
for (int k = 0; k < rows; ++k) {
if (matrix[k][colIndex] < maxInRow) {
isSaddlePoint = false;
break;
}
}
// 如果找到了鞍点
if (isSaddlePoint) {
cout << i << " " << colIndex << " " << maxInRow << " ";
foundSaddlePoint = true;
break; // 找到一个鞍点后可以退出
}
}
if (!foundSaddlePoint) {
cout << "N";
}
return 0;
}