Cho ma trận vuông M[r][c]. Kiểm tra xem có phải ma trận Involutory hay không. Ma trận Involutory: M × M = I (ma trận đơn vị). Ma trận đơn vị: đường chéo chính = 1, các phần tử khác = 0.

Ví dụ
Input: {{1,0,0},{0,-1,0},{0,0,-1}} → Có
Input: {{3,0,0},{0,2,0},{0,0,3}} → Không
Thuật toán
BẮT ĐẦU
#define size 3
Hàm nhanMaTran(int a[][size], int res[][size])
Nhân a với a lưu vào res
Hàm kiemTra(int a[size][size])
Gọi nhanMaTran(a, res)
Với i,j: nếu i==j và res[i][j]!=1 → false
nếu i!=j và res[i][j]!=0 → false
Trả về true
main()
a = {{1,0,0},{0,-1,0},{0,0,-1}}
Nếu kiemTra(a) in "Involutory" ngược lại "không phải"
KẾT THÚC
Ví dụ mã C++
#include <bits/stdc++.h>
#define size 3
using namespace std;
void nhanMaTran(int a[][size], int res[][size]){
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
res[i][j] = 0;
for (int k = 0; k < size; k++)
res[i][j] += a[i][k] * a[k][j];
}
}
}
bool kiemTra(int a[size][size]){
int res[size][size];
nhanMaTran(a, res);
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
if (i == j && res[i][j] != 1) return false;
if (i != j && res[i][j] != 0) return false;
}
}
return true;
}
int main(){
int a[size][size] = {{1,0,0},{0,-1,0},{0,0,-1}};
if (kiemTra(a))
cout << "là ma trận Involutory";
else
cout << "không phải ma trận Involutory";
return 0;
}
Kết quả đầu ra
là ma trận Involutory