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 &lt; n; i++) {
    int minRow = matrix[i][0];
    int colIndex = 0;
    for (int j = 1; j &lt; m; j++) {
        if (matrix[i][j] &lt; minRow) {
            minRow = matrix[i][j];
            colIndex = j;
        }
    }

    bool isSaddle = true;
    for (int k = 0; k &lt; n; k++) {
        if (matrix[k][colIndex] &gt; minRow) {
            isSaddle = false;
            break;
        }
    }

    if (isSaddle) {
        hasSaddle = true;
        cout &lt;&lt; &quot;Row: &quot; &lt;&lt; i + 1 &lt;&lt; &quot; Column: &quot; &lt;&lt; colIndex + 1 &lt;&lt; &quot; Value: &quot; &lt;&lt; minRow &lt;&lt; endl;
    }
}

if (!hasSaddle) {
    cout &lt;&lt; &quot;not exist&quot; &lt;&lt; endl;
}

return 0;

}

代码详解

代码的思路如下:

  1. 首先,输入矩阵的行数和列数,以及矩阵的元素。
  2. 然后,遍历每一行,找到每一行中的最小值和最小值所在的列索引。
  3. 接着,判断该最小值是否为该列的最大值,如果是,则该值就是马鞍数,输出其位置和值。
  4. 最后,如果遍历完所有行都没有找到马鞍数,则输出 "not exit"。

代码优化

代码中可以进行以下优化:

  1. 使用标准库中的算法,例如 std::min_elementstd::max_element 来简化代码。
  2. 使用更简洁的判断条件,例如使用 all_ofany_of 算法来判断某个元素是否满足某个条件。

总结

本文介绍了如何使用 C++ 语言编写算法来寻找一个二维数组中的马鞍数,并提供了完整的代码示例和优化建议。希望本文能够帮助您更好地理解马鞍数的定义以及如何使用 C++ 语言编写算法来寻找它。


原文地址: https://www.cveoy.top/t/topic/p5ni 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录