首页 > 解决方案 > 矩阵的传递性

问题描述

我正在尝试实现一个 c++ 解决方案来查找 n*n 元素的二进制矩阵是否是可传递的。这是条件:

矩阵 M 是可传递的当且仅当对于任何元素 a, b, c (a != b != c) 使得 M[a][b] = 1 和 M[b][c] = 1 条件 M [a][c] = 1 为真。

如果矩阵是可传递的,则输出应为 1,否则为 0。

我的代码:

#include<iostream> 
using namespace std;

int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int n;
    bool trans = true;
    cin >> n;

    int **m = new int*[n];
    for (int i = 0; i < n; i++) {
        m[i] = new int[n];
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> m[i][j];
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (m[i][j] == 1 && m[j][i] == 1 && m[i][i] != 1)
                trans = false;
        }
    }

    if (trans)
        cout << 1;
    else
        cout << 0;
}

该代码没有通过我要提交的电子法官。可能是什么问题?

标签: c++matrix

解决方案


#include<iostream> 
using namespace std;

int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int n;
    bool trans = true;
    cin >> n;

    int **m = new int*[n];
    for (int i = 0; i < n; i++) {
        m[i] = new int[n];
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> m[i][j];
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++)
            {
                if ((i!=j && j!=k) && !(m[i][j] == 1 && m[j][k] == 1 && m[k][i] == 1))
                    trans = false;
            }
        }
    }

    if (trans)
        cout << 1;
    else
        cout << 0;
}

试试这个代码,这应该可以正常工作


推荐阅读