在处理对称矩阵的存储的问题上,通常为多个值相同的元素分配一个存储空间,也就是将n^2个元素压缩存储到n*(n+1)/2个元素的存储空间中。一般情况下,以行序为主序存储其下三角中的元素。
假设以一维数组M[n(n+1)/2]作为n阶对称矩阵A的存储结构,则M[k]和矩阵中的元素aij之间存在着下述一一对应的关系:
以下是c++实现代码:
#include <iostream>
using namespace std;
void main() {
int dem, x, y;
cout << "请输入对称矩阵的维度 = ";
cin >> dem;
int A[110][110];
int ans[5100];
int k = 0;
//输入对称矩阵A
for (int i = 0; i < dem; i++) {
for (int j = 0; j < dem; j++) {
cin >> A[i][j];
}
cout <<endl;
}
//压缩矩阵存储在矩阵ans中
cout << "压缩矩阵:" << endl;
for (int i = 0; i < dem; i++) {
for (int j = 0; j <= i; j++) {
cout << A[i][j] << " ";
ans[k++] = A[i][j];
}
cout << endl;
}
cout << endl;
cout << "请输入元素在对称矩阵中的位置:";
cin >> x >> y;
if (x >= y) {
cout << "该位置在压缩矩阵中的元素为" << ans[x*(x + 1) / 2 + y] << endl;
}
else {
cout << "该位置在压缩矩阵中的元素为"<<ans[y*(y + 1) / 2 + x] << endl;;
}
}
运行结果: