C++ 寻找马鞍数 - 算法实现与代码解析
C++ 寻找马鞍数 - 算法实现与代码解析
本文介绍了马鞍数的概念,并提供 C++ 代码实现,用于查找矩阵中的马鞍数。代码示例清晰易懂,附带详细注释,帮助理解算法逻辑。
马鞍数定义
在矩阵中,如果一个元素是其所在行中的最小值,同时也是其所在列中的最大值,那么这个元素就被称为马鞍数。
算法思路
1. 遍历矩阵,对于每个元素,判断它是否为所在行的最小值。 2. 如果是,则进一步判断它是否为所在列的最大值。 3. 如果是,则将其加入马鞍数列表。
代码实现
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> matrix(n, vector<int>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
vector<pair<int, pair<int, int>>> saddlePoints;
for (int i = 0; i < n; i++) {
int minRow = matrix[i][0];
int minColIndex = 0;
for (int j = 1; j < m; j++) {
if (matrix[i][j] < minRow) {
minRow = matrix[i][j];
minColIndex = j;
}
}
bool isSaddlePoint = true;
for (int k = 0; k < n; k++) {
if (matrix[k][minColIndex] > minRow) {
isSaddlePoint = false;
break;
}
}
if (isSaddlePoint) {
saddlePoints.push_back({minRow, {i, minColIndex}});
}
}
if (saddlePoints.empty()) {
cout << "not exist" << endl;
} else {
for (const auto& saddlePoint : saddlePoints) {
cout << saddlePoint.second.first + 1 << " " << saddlePoint.second.second + 1 << " " << saddlePoint.first << endl;
}
}
return 0;
}
代码解析
1. 定义矩阵:使用 vector<vector<int>> 表示矩阵,并读取输入数据。
2. 遍历矩阵:使用双重循环遍历矩阵中的每个元素。
3. 寻找行最小值:在每一行中找到最小值,以及最小值所在的列索引。
4. 寻找列最大值:判断行最小值是否为所在列的最大值。如果所有列中的元素都小于等于行最小值,则该元素为马鞍数。
5. 输出结果:如果存在马鞍数,则输出所有马鞍数的行号、列号以及马鞍数本身。如果不存在马鞍数,则输出 "not exist"。
总结
本文介绍了马鞍数的概念,并通过 C++ 代码实现算法,帮助理解和实现马鞍数的查找。代码示例清晰易懂,注释详细,方便理解和学习。
原文地址: https://www.cveoy.top/t/topic/p5nA 著作权归作者所有。请勿转载和采集!