#include<stdio.h>
struct tuple3tp /*稀疏矩阵的建立和转置*/ { int i,j; int v; }; struct sparmattp
{ int mu,nu,tu; struct tuple3tp data[31]; };
struct sparmattp a,b;
void creat_sparmat()//稀疏矩阵的建立
{ int i; printf("输入稀疏矩阵行值,列值,非零元个数(以空格分开):\n"); scanf("%d%d%d",&a.mu,&a.nu,&a.tu); for(i=1;i<=a.tu;i++) { printf("输入行坐标,列坐标,非零元素(以空格分开)\n"); scanf("%d%d%d",&a.data[i].i,&a.data[i].j,&a.data[i].v); } }
void trans_sparmat()
{ int col,p,q; b.mu=a.nu; b.nu=a.mu; b.tu=a.tu; if(b.tu!=0) { q=1; for(col=1;col<=a.nu;col++) for(p=1;p<=a.tu;p++) if (a.data[p].j==col) { b.data[q].i=a.data[p].j; b.data[q].j=a.data[p].i; b.data[q].v=a.data[p].v; q++; } }
} void print(struct sparmattp x)//矩阵的输出
{ int i,j,k,flag; for(i=1;i<=x.mu;i++) { for(j=1;j<=x.nu;j++) { flag=0; for(k=1;k<=x.tu;k++) { if(((x.data[k].i)==i)&&((x.data[k].j)==j)) { flag=1; printf("%5d",x.data[k].v); } } if(flag==0)printf(" 0");
}
printf("\n");
}
}
void main()
{int f=1; while(f) { printf("稀疏矩阵的建立与转置\n"); creat_sparmat(); trans_sparmat(); printf("原矩阵为:\n"); print(a); printf("转置矩阵为:\n"); print(b); printf("是否继续:任意键数字键1-9继续/数字0结束\n"); scanf("%d",&f); } } |
|