编写一个C++程序寻找矩阵鞍点案例代码

题目描述

在矩阵中,一个元素在所在行中是最大值,在所在列中是最小值,则被称为鞍点(Saddle point)。求所给矩阵的鞍点 请根据提示,在右侧编辑器补充代码,用户输入两个正整数 m 和 n(m,n≤10),然后输入该 m 行 n 列矩阵 mat 中的元素,如果找到 mat 的鞍点,就输出它的下标;如果找到多个鞍点,则分行输出它们的下标(行下标小的鞍点优先输出);否则,输出“Not Found”。

案例代码

以下是您所描述的问题的解决方案的C++代码实现:

#include <iostream>
using namespace std;

int main() {
    int m, n;
    cout << "请输入矩阵的行数 m 和列数 n(m、n≤10):" << endl;
    cin >> m >> n;

    int mat[10][10];
    cout << "请输入矩阵元素:" << endl;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> mat[i][j];
        }
    }

    bool found = false;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            // 检查当前元素是否是所在行的最大值
            bool isRowMax = true;
            for (int k = 0; k < n; ++k) {
                if (mat[i][k] > mat[i][j]) {
                    isRowMax = false;
                    break;
                }
            }

            // 检查当前元素是否是所在列的最小值
            bool isColMin = true;
            for (int k = 0; k < m; ++k) {
                if (mat[k][j] < mat[i][j]) {
                    isColMin = false;
                    break;
                }
            }

            // 如果是鞍点,输出其下标
            if (isRowMax && isColMin) {
                cout << "鞍点位置:" << i << " " << j << endl;
                found = true;
            }
        }
    }

    if (!found) {
        cout << "Not Found" << endl;
    }

    return 0;
}

该程序首先要求用户输入矩阵的行数 m 和列数 n,然后输入矩阵的元素。接下来,它会遍历矩阵中的每一个元素,检查是否满足鞍点的条件:即在所在行中是最大值,且在所在列中是最小值。如果找到鞍点,则输出其下标;如果找到多个鞍点,则分行输出它们的下标;如果找不到鞍点,则输出“Not Found”。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享