Ma trận thưa (sparse matrix) là ma trận mà đa số phần tử bằng 0. Nói cách khác, nếu hơn một nửa số phần tử trong ma trận là 0, đó là ma trận thưa. Ví dụ:
Ma trận dưới đây chứa 5 số 0. Vì số lượng số 0 nhiều hơn một nửa tổng phần tử, nên là ma trận thưa.
1 0 2 5 0 0 0 0 9
Chương trình kiểm tra ma trận thưa:
Ví dụ
#include <iostream>
using namespace std;
int main() {
int a[10][10] = {{2, 0, 0}, {0, 3, 8}, {0, 9, 0}};
int i, j, count = 0;
int r = 3, c = 3;
for (i = 0; i < r; ++i) {
for (j = 0; j < c; ++j) {
if (a[i][j] == 0)
count++;
}
}
cout << "Ma trận là:" << endl;
for (i = 0; i < r; ++i) {
for (j = 0; j < c; ++j)
cout << a[i][j] << " ";
cout << endl;
}
cout << "Có " << count << " số 0 trong ma trận" << endl;
if (count > ((r * c) / 2))
cout << "Đây là ma trận thưa" << endl;
else
cout << "Đây không phải ma trận thưa" << endl;
return 0;
}
Kết quả đầu ra
Ma trận là: 2 0 0 0 3 8 0 9 0 Có 5 số 0 trong ma trận Đây là ma trận thưa
Trong chương trình, vòng lặp lồng nhau đếm số số 0 trong ma trận:
for (i = 0; i < r; ++i) {
for (j = 0; j < c; ++j) {
if (a[i][j] == 0)
count++;
}
}
Sau khi đếm xong, hiển thị ma trận bằng vòng lặp lồng nhau:
cout << "Ma trận là:" << endl;
for (i = 0; i < r; ++i) {
for (j = 0; j < c; ++j)
cout << a[i][j] << " ";
cout << endl;
}
Cuối cùng hiển thị số lượng số 0. Nếu số 0 nhiều hơn một nửa tổng phần tử thì là ma trận thưa, ngược lại thì không:
cout << "Có " << count << " số 0 trong ma trận" << endl; if (count > ((r * c) / 2)) cout << "Đây là ma trận thưa" << endl; else cout << "Đây không phải ma trận thưa" << endl;