存储思路
上、下三角的压缩存储和对称矩阵的压缩存储(上三角部分、下三角部分)类似,不过是多了一个常数要存储。
对称矩阵的压缩存储
代码
#include <iostream>using namespace std;int main(){int n;printf("请输入下三角矩阵的维数:");scanf("%d",&n);int arr[n+1][n+1];printf("请输入下三角矩阵:\n");for(int i=1;i<n+1;i++){for(int j=1;j<n+1;j++){scanf("%d",&arr[i][j]);}}//存储下三角矩阵,多一位存储上三角区元素 int a[n*(n+1)/2+1];for(int i=1;i<n+1;i++){for(int j=1;j<=i;j++){a[i*(i-1)/2+j-1]=arr[i][j];}}a[n*(n+1)/2]=arr[1][2];for(int i=0;i<n*(n+1)/2+1;i++){printf("%d ",a[i]);}printf("\n------------------\n");int m;printf("请输入上三角矩阵的维数:");scanf("%d",&m);int arr2[m+1][m+1];printf("请输入上三角矩阵:\n");for(int i=1;i<m+1;i++){for(int j=1;j<m+1;j++){scanf("%d",&arr2[i][j]);}}//存储下三角矩阵,多一位存储上三角区元素 int a2[m*(m+1)/2+1];for(int i=1;i<m+1;i++){for(int j=i;j<m+1;j++){a2[(i-1)*(2*m-i+2)/2+(j-i)]=arr2[i][j];}}a2[m*(m+1)/2]=arr2[2][1];for(int i=0;i<m*(m+1)/2+1;i++){printf("%d ",a2[i]);}return 0;}