Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra ma trận Bisymmetric trong C++

Ma trận Bisymmetric (đối xứng kép) là ma trận vuông đối xứng qua cả hai đường chéo chính.

Ví dụ ma trận Bisymmetric 5x5

1 2 3 4 5
2 6 7 8 4
3 7 9 7 3
4 8 7 6 2
5 4 3 2 1

Đối xứng qua đường chéo chính (i,j) ↔ (j,i) và đường chéo phụ (i,j) ↔ (n-j-1, n-i-1).

Thuật toán

  1. Kiểm tra đối xứng qua đường chéo chính: với mọi i,j (j < i), mat[i][j] == mat[j][i].
  2. Kiểm tra đối xứng qua đường chéo phụ: với mọi i,j (j < n-i), mat[i][j] == mat[n-j-1][n-i-1].
  3. Nếu cả hai thỏa mãn → Bisymmetric.

Code ví dụ

#include <iostream>
#define N 5
using namespace std;

int matrix[N][N] = {
    {1, 2, 3, 4, 5},
    {2, 6, 7, 8, 4},
    {3, 7, 9, 7, 3},
    {4, 8, 7, 6, 2},
    {5, 4, 3, 2, 1}
};

bool checkBiSymmetric() {
    // Kiểm tra đối xứng đường chéo chính
    for (int i = 0; i < N; i++)
        for (int j = 0; j < i; j++)
            if (matrix[i][j] != matrix[j][i])
                return false;
    
    // Kiểm tra đối xứng đường chéo phụ
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N - i; j++)
            if (matrix[i][j] != matrix[N - j - 1][N - i - 1])
                return false;
    
    return true;
}

int main() {
    if (checkBiSymmetric())
        cout << "Yes, the matrix is bisymmetric";
    else
        cout << "No, the matrix is not bisymmetric";
    return 0;
}

Kết quả

Yes, the matrix is bisymmetric

Độ phức tạp

  • Thời gian: O(n²) - duyệt nửa ma trận cho mỗi đường chéo
  • Không gian: O(1)

Lưu ý

Ma trận Bisymmetric là tập con của ma trận đối xứng (symmetric). Mọi ma trận bisymmetric đều symmetric, nhưng ngược lại không đúng.