C++ 寻找马鞍数算法 - 代码详解及优化
C++ 寻找马鞍数算法 - 代码详解及优化
本文将介绍如何使用 C++ 语言编写算法来寻找一个二维数组中的马鞍数,并提供完整的代码示例和优化建议。马鞍数指的是在一个矩阵中,行上最小而列上最大的元素。
问题描述
给定一个 n 行 m 列的矩阵,求出其中所有的马鞍数,并输出其位置。
输入
输入共 n+1 行,第一行包含两个整数 n 和 m (n, m < 10),分别表示矩阵的行数和列数。从第二行到第 n+1 行,每行包含 m 个整数,表示矩阵中的元素。
输出
如果存在马鞍数,则输出所有马鞍数,每行一个,格式为:"Row: 行号 Column: 列号 Value: 马鞍数"。如果不存在马鞍数,则输出 "not exit"。
C++ 代码
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int matrix[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
bool hasSaddle = false;
for (int i = 0; i < n; i++) {
int minRow = matrix[i][0];
int colIndex = 0;
for (int j = 1; j < m; j++) {
if (matrix[i][j] < minRow) {
minRow = matrix[i][j];
colIndex = j;
}
}
bool isSaddle = true;
for (int k = 0; k < n; k++) {
if (matrix[k][colIndex] > minRow) {
isSaddle = false;
break;
}
}
if (isSaddle) {
hasSaddle = true;
cout << "Row: " << i + 1 << " Column: " << colIndex + 1 << " Value: " << minRow << endl;
}
}
if (!hasSaddle) {
cout << "not exist" << endl;
}
return 0;
}
代码详解
代码的思路如下:
- 首先,输入矩阵的行数和列数,以及矩阵的元素。
- 然后,遍历每一行,找到每一行中的最小值和最小值所在的列索引。
- 接着,判断该最小值是否为该列的最大值,如果是,则该值就是马鞍数,输出其位置和值。
- 最后,如果遍历完所有行都没有找到马鞍数,则输出 "not exit"。
代码优化
代码中可以进行以下优化:
- 使用标准库中的算法,例如
std::min_element和std::max_element来简化代码。 - 使用更简洁的判断条件,例如使用
all_of和any_of算法来判断某个元素是否满足某个条件。
总结
本文介绍了如何使用 C++ 语言编写算法来寻找一个二维数组中的马鞍数,并提供了完整的代码示例和优化建议。希望本文能够帮助您更好地理解马鞍数的定义以及如何使用 C++ 语言编写算法来寻找它。
原文地址: https://www.cveoy.top/t/topic/p5ni 著作权归作者所有。请勿转载和采集!