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

Kiểm tra ma trận đối xứng trong C++

Trong đại số tuyến tính, ma trận M[][] là đối xứng (symmetric) khi và chỉ khi ma trận chuyển vị bằng chính nó. Chuyển vị là lật qua đường chéo chính, hàng thành cột.

Ví dụ ma trận đối xứng:

[1 4 7]   [1 4 7]
[4 5 6] = [4 5 6]
[7 6 9]   [7 6 9]

Ví dụ

Input: {{1,2,3},{2,2,4},{3,4,1}} → đối xứng
Input: {{1,7,3},{2,9,5},{4,6,8}} → không đối xứng

Cách làm

  • Tính ma trận chuyển vị lưu vào ma trận khác
  • So sánh ma trận kết quả với ma trận gốc

Thuật toán

BẮT ĐẦU
    #define n 10
    Hàm chuyenVi(int a[][n], int b[][n], int k)
        Với i,j từ 0 đến k-1: b[i][j] = a[j][i]
    Hàm kiemTra(int a[][n], int k)
        Tạo ma trận b[k][n]
        Gọi chuyenVi(a,b,k)
        So sánh a[i][j] với b[i][j], nếu khác trả về false
        Trả về true
    main()
        a = {{1,2,3},{2,2,4},{3,4,1}}
        Nếu kiemTra(a,3) in "đối xứng" ngược lại "không đối xứng"
KẾT THÚC

Ví dụ mã C++

#include <iostream>
#define n 10
using namespace std;

void chuyenVi(int a[][n], int b[][n], int k){
    for (int i = 0; i < k; i++)
        for (int j = 0; j < k; j++)
            b[i][j] = a[j][i];
}

bool kiemTra(int a[][n], int k){
    int b[k][n];
    chuyenVi(a, b, k);
    for (int i = 0; i < k; i++)
        for (int j = 0; j < k; j++)
            if (a[i][j] != b[i][j])
                return false;
    return true;
}

int main(){
    int a[][n] = {{1,2,3},{2,2,4},{3,4,1}};
    if (kiemTra(a, 3))
        cout << "là ma trận đối xứng";
    else
        cout << "không phải ma trận đối xứng";
    return 0;
}

Kết quả đầu ra

là ma trận đối xứng