当前位置: 代码迷 >> 综合 >> 数据结构 C/C++ 对称矩阵
  详细解决方案

数据结构 C/C++ 对称矩阵

热度:9   发布时间:2023-11-17 09:55:14.0
#include<stdio.h>
#include<stdlib.h>
static int N,M;
void Out(int a[N][N])               //对称矩阵输出
{int j,i;printf("矩阵为:\n");for(i=0;i<N;i++)for(j=0;j<N;j++){printf("%-8d",a[i][j]);if(j==N-1)    printf("\n");}
}
int *Compress(int a[N][N])          //压缩对称矩阵
{int i,j,p[100],t=0;for(i=0;i<N;i++)for(j=i;j<N;j++){p[t]=a[i][j];t++;}return p;
}
int main()
{printf("请输入矩阵阶数n:");scanf("%d",&N);int a[N][N],i=0,j=0,t=0,b[N][N],M;M=(1+N)*N/2;int *k;A:   for(i=0;i<N;i++)                //生成矩阵{printf("第%d行请输入%d个元素\n",i+1,N);for(j=0;j<N;j++){scanf("%d",&a[i][j]);}}for(i=0;i<N;i++)                //生成矩阵{for(j=i;j<N;j++){if(a[i][j]!=a[j][i]){printf("输入矩阵不是对称矩阵,请重新输入\n");goto A;}}}Out(a);k=Compress(a);t=0;printf("压缩矩阵b为:\n");for(i=0;i<M;i++){printf("%d  ",*(k+t));t++;}printf("\n");t=0;for(i=0;i<N;i++)for(j=i;j<N;j++){b[i][j]=k[t];b[j][i]=b[i][j];t++;}printf("释放矩阵b为:\n");Out(b);return 0;
}