C++程序 检查矩阵是否对称

C++程序 检查矩阵是否对称

如果矩阵的转置与给定矩阵相同,则称该方阵为 对称矩阵 ,可以通过将行变为列,将列变为行来获得 对称矩阵

例如:

输入:1 2 3
2 1 4
3 4 3
输出:Yes

输入:3 5 8
3 4 7
8 5 3
输出:No

下面是一个简单的解法:

  1. 创建给定矩阵的转置矩阵。
  2. 检查转置矩阵和给定矩阵是否相同。
//检查一个矩阵是否对称的C++代码。
#include <iostream>
using namespace std;

const int MAX = 100;

//在tr[N][N]中填充mat[N][N]的转置
void transpose(int mat[][MAX], int tr[][MAX], int N)
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            tr[i][j] = mat[j][i];
}

//如果mat[N][N]是对称的,则返回true,否则返回false
bool isSymmetric(int mat[][MAX], int N)
{
    int tr[N][MAX];
    transpose(mat, tr, N);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (mat[i][j] != tr[i][j])
                return false;
    return true;
}

//驱动程序
int main()
{
    int mat[][MAX] = { { 1, 3, 5 },
                       { 3, 2, 4 },
                       { 5, 4, 1 } };

    if (isSymmetric(mat, 3))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}  

输出 :

Yes

时间复杂度:O(N × N)

辅助空间:O(N × N)

下面是一种更高效的解法来检查一个矩阵是否对称,而不创建转置矩阵。我们基本上需要比较mat[i][j] 和 mat[j][i]。

//检查一个矩阵是否对称的高效C++代码。
#include <iostream>
using namespace std;

const int MAX = 100;

//如果mat[N][N]是对称的,则返回true,否则返回false
bool isSymmetric(int mat[][MAX], int N)
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (mat[i][j] != mat[j][i])
                return false;
    return true;
}

//驱动程序
int main()
{
    int mat[][MAX] = { { 1, 3, 5 },
                       { 3, 2, 4 },
                       { 5, 4, 1 } };

    if (isSymmetric(mat, 3))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}  

输出:

Yes

时间复杂度:O(N×N)

辅助空间:O(1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例