c++编写程序求出二维数组中的鞍点。 提示:测试集要求先输入一个二维数组,输出鞍点所在行和列以及元素值;无鞍点则输出-1。 效果如下: 输入:9 10 11 2 23 15 2 11 16 输出:1 3 11
时间: 2024-10-17 15:03:19 浏览: 20
在 C++ 中,我们可以定义一个函数来寻找二维数组(矩阵)中的鞍点。鞍点是指矩阵中某个位置的元素,其值既不大于它左边的元素也不小于它上面的元素。以下是使用 C++ 编程的一个示例:
```cpp
#include <iostream>
#include <vector>
// 定义鞍点结构体
struct Point {
int row;
int col;
int value;
};
// 比较鞍点函数,用于确定是否满足鞍点条件
bool isLowestBelow(std::vector<std::vector<int>>& matrix, int row, int col) {
return (col > 0 && matrix[row][col] >= matrix[row][col - 1]);
}
bool isHighestOnLeft(std::vector<std::vector<int>>& matrix, int row, int col) {
return (row > 0 && matrix[row][col] <= matrix[row - 1][col]);
}
// 找寻鞍点
Point findHorseRace(const std::vector<std::vector<int>>& matrix) {
int rows = matrix.size();
if (rows == 0) return {-1, -1, -1}; // 如果为空,则返回无鞍点
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < rows; ++j) {
if (isLowestBelow(matrix, i, j) && isHighestOnLeft(matrix, i, j)) {
return {i, j, matrix[i][j]};
}
}
}
return {-1, -1, -1}; // 没有找到鞍点,返回默认值
}
int main() {
std::vector<std::vector<int>> input = {{9, 10, 11}, {2, 23, 15}, {2, 11, 16}};
Point result = findHorseRace(input);
if (result.row != -1) {
std::cout << "鞍点所在的行:" << result.row + 1 << ", 列:" << result.col + 1 << ", 值:" << result.value << std::endl;
} else {
std::cout << "-1" << std::endl;
}
return 0;
}
```
在这个代码里,`findHorseRace` 函数遍历整个矩阵,检查每个位置是否同时满足左右最小、上方最大这两个条件。如果找到符合条件的位置,就返回该点作为结果。如果没有找到,函数最后返回 `-1`。
阅读全文