寻找矩阵的鞍点。(在所在行中最大,所在列中最小,鞍点可能不止一个)用c++写
时间: 2024-10-24 08:05:32 浏览: 72
寻找矩阵中的鞍点是指在一个二维数组中找到那些既不是最大值也不是最小值,但在其所在的行和列中分别是最小值和最大值的元素。这种元素称为鞍点(因为它们的位置像是马鞍的形状)。在C++中,你可以通过双重循环遍历矩阵,并记录每个位置的行最大值、列最小值来找到所有可能的鞍点。
下面是一个简单的示例代码:
```cpp
#include <vector>
#include <climits>
std::vector<std::pair<int, int>> findAverages(std::vector<std::vector<int>>& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
std::vector<int> rowMax(rows, INT_MIN);
std::vector<int> colMin(cols, INT_MAX);
std::vector<std::pair<int, int>> result;
// 遍历矩阵,更新行最大值和列最小值
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (matrix[i][j] > rowMax[i]) {
rowMax[i] = matrix[i][j];
}
if (matrix[i][j] < colMin[j]) {
colMin[j] = matrix[i][j];
}
}
}
// 检查哪些位置同时满足行最大值和列最小值条件
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (rowMax[i] == matrix[i][j] && colMin[j] == matrix[i][j]) {
result.push_back({i, j});
}
}
}
return result;
}
// 示例用法
int main() {
std::vector<std::vector<int>> matrix = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
auto鞍点 = findAverages(matrix);
for (const auto& point : 鞍点) {
std::cout << "找到了鞍点 (" << point.first << ", " << point.second << ") 的值: " << matrix[point.first][point.second] << std::endl;
}
return 0;
}
```
这个代码首先初始化两个向量来存储每行的最大值和每列的最小值,然后遍历矩阵更新这两个值。最后,它再次遍历矩阵,找出那些行最大值和列最小值相等的位置,即为鞍点。
阅读全文