c++编写程序:二维数组某一位置上的元素在该行中最大,且在该列中最小,称为鞍点。从键盘上输人一个二维数组的元素值,当鞍点存在时,编写程序找出所有的鞍点。
时间: 2024-11-17 22:28:51 浏览: 7
矩阵中寻找鞍点_C++_算法_矩阵鞍点算法_鞍点_
5星 · 资源好评率100%
在C++中,要编写一个程序找出二维数组中的鞍点,可以采用以下步骤:
1. 定义一个函数来检查某个元素是否是鞍点。这涉及到比较当前元素与其所在行的最大元素和所在列的最小元素。
```cpp
bool isSaddlePoint(int arr[rows][cols], int i, int j, int rows, int cols) {
// 检查列最小
if (j > 0 && arr[i][j] < arr[i][j - 1]) return false;
// 检查行最大
if (i > 0 && arr[i][j] > arr[i - 1][j]) return false;
// 如果满足条件则检查左右邻居
for (int k = (i > 0 ? i - 1 : 0); k <= (i + 1 < rows ? i + 1 : rows - 1); ++k)
for (int l = (j > 0 ? j - 1 : 0); l <= (j + 1 < cols ? j + 1 : cols - 1); ++l)
if (arr[k][l] >= arr[i][j])
return false; // 如果找到更大元素,则不是鞍点
return true;
}
```
2. 主程序部分,接受用户输入并遍历整个二维数组寻找鞍点:
```cpp
int main() {
int rows, cols;
cout << "Enter the number of rows and columns: ";
cin >> rows >> cols;
int arr[rows][cols];
cout << "Enter the elements of the array: ";
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
cin >> arr[i][j];
vector<pair<int, int>> saddlePoints;
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
if (isSaddlePoint(arr, i, j, rows, cols))
saddlePoints.push_back({i, j});
if (!saddlePoints.empty()) {
cout << "The saddle points are: ";
for (const auto& [row, col] : saddlePoints)
cout << "(" << row << ", " << col << ") ";
} else {
cout << "No saddle point found.";
}
return 0;
}
```
这个程序首先接收用户输入的矩阵尺寸和元素,然后遍历每个元素,如果发现是鞍点就添加到结果列表中。最后输出所有找到的鞍点坐标。
阅读全文