C++写出寻找矩阵鞍点的代码
时间: 2024-12-19 22:24:49 浏览: 0
矩阵中寻找鞍点_C++_算法_矩阵鞍点算法_鞍点_
5星 · 资源好评率100%
在C++中,我们可以编写一个函数来寻找矩阵的鞍点。这里是一个基本的示例,假设我们的矩阵是一个二维整型数组`matrix`,并使用邻接比较的方法找到鞍点:
```cpp
#include <vector>
using namespace std;
// 辅助函数,用于比较矩阵元素
bool isMin(vector<int>& matrix, int i, int j, int minCol) {
return (i > 0 && matrix[i - 1][j] > matrix[i][j]) &&
(j > 0 && matrix[i][j - 1] >= matrix[i][j]) &&
(j + 1 < matrix[0].size() && matrix[i][j + 1] > matrix[i][j]);
}
// 主函数,找出矩阵的鞍点
pair<int, int> findHillValley(const vector<vector<int>>& matrix) {
int rows = matrix.size();
if (rows == 0)
return {};
// 初始化最大行和最小列
int maxRow = 0;
int minCol = 0;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < matrix[i].size(); ++j) {
if (!isMin(matrix, i, j, minCol)) {
// 更新最大行和最小列
if (matrix[i][j] < matrix[maxRow][minCol])
maxRow = i;
else if (matrix[i][j] > matrix[minCol][j])
minCol = j;
}
}
}
// 返回鞍点坐标
return {maxRow, minCol};
}
int main() {
vector<vector<int>> matrix = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
auto result = findHillValley(matrix);
if (result.first != -1 && result.second != -1)
cout << "A saddle point is at (" << result.first << ", " << result.second << ").";
else
cout << "No saddle points found.";
return 0;
}
```
这个代码首先定义了一个辅助函数`isMin`用于判断当前位置是否为鞍点,然后在主函数`findHillValley`中通过遍历矩阵来找出最大行和最小列。如果找到新的鞍点,会更新这两个值。最后返回鞍点的坐标。
阅读全文