<C++> 判断一个二维数组是否有“鞍点”,即某位置上的元素在该行上最大,在该列上最小。如有,输出其行列号和值;若无,给出提示。只能使用iostream库
时间: 2024-10-28 09:11:52 浏览: 30
求二维数组鞍点的问题,用c++编写的,并指出鞍点至多只有一个
5星 · 资源好评率100%
在C++中,判断一个二维数组是否有“鞍点”可以遵循以下步骤:
1. 定义一个函数 `findHorseRace(int grid[N][M], int N, int M)`,其中 `grid` 是二维数组,`N` 和 `M` 分别是行数和列数。
2. 首先初始化两个变量,`minCol` 存储当前找到的最小值所在的列,`maxRow` 存储当前找到的最大值所在的行,以及 `minVal` 存储最小值。
3. 使用两层嵌套循环遍历整个矩阵:
- 对于每一行 `i` (从0到`N-1`),找到这一行中的最小值 `minVal` 和对应的列索引 `col`,如果这个值比已知的最小值小,更新 `minVal` 和 `minCol`。
- 同时,对于每一列 `j` (从0到`M-1`),找到这一列中的最大值 `maxVal` 和对应的行索引 `row`,如果这个值比已知的最大值大,更新 `maxVal` 和 `maxRow`。
4. 在遍历过程中,如果同时找到了最小值和最大值,说明我们找到了一个鞍点。此时,检查 `grid[maxRow][minCol]` 是否等于 `minVal` 和 `maxVal`,如果相等,则返回鞍点的坐标(`maxRow`, `minCol`),并打印出值。如果不相等,说明没有鞍点,给出相应的提示。
5. 如果遍历结束后都没有找到鞍点,输出提示信息说找不到鞍点。
下面是一个简单的示例代码:
```cpp
#include <iostream>
using namespace std;
void findHorseRace(int grid[100][100], int N, int M) {
if (N == 0 || M == 0) {
cout << "Array is empty or has no elements." << endl;
return;
}
int minCol = 0, maxRow = 0;
int minVal = INT_MAX, maxVal = INT_MIN;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (grid[i][j] < minVal) {
minVal = grid[i][j];
minCol = j;
}
if (grid[i][j] > maxVal) {
maxVal = grid[i][j];
maxRow = i;
}
}
}
if (minVal == grid[maxRow][minCol]) {
cout << "Found an 'Athena Point': (" << maxRow << ", " << minCol << ") with value " << minVal << endl;
} else {
cout << "No 'Athena Point' found in the given array." << endl;
}
}
int main() {
// 请替换这里的二维数组实例
int grid[100][100] = { ... };
int N = sizeof(grid) / sizeof(grid[0]);
int M = sizeof(grid[0]) / sizeof(grid[0][0]);
findHorseRace(grid, N, M);
return 0;
}
```
阅读全文