第5章 数组和广义表—矩阵的快速转置

来源:互联网 发布:淘宝网玩具飞机 编辑:程序博客网 时间:2024/06/05 10:36
/* *    这个程序用三元表顺序存储来表示稀疏矩阵, *    并将这个矩阵快速转置。 */#include<stdio.h> /*稀疏矩阵的三元组顺序存储表示*/#define MAXSIZE  100typedef struct triple{int i,j,e;}triple;typedef struct matrix{triple data[MAXSIZE+1];int mu,nu,tu;}matrix;matrix fasttranspose(matrix M,matrix T){ /*采用三元组存储表示,*/int q,p,col,num[100],cpot[100],t;    /*将稀疏矩阵 M 快速转置为矩阵 T 。*/T.mu = M.nu = 4;              T.nu = M.mu = 5;T.tu = M.tu = 5;if(T.tu!=0){for(col = 0;col<=M.nu-1;col++)num[col] = 0;for(t = 0;t<=M.tu-1;t++)num[M.data[t].j]++;cpot[0] = 0;for(col = 1;col<=M.nu;col++)cpot[col] = cpot[col-1]+num[col-1];for(p = 0;p<=M.tu-1;p++){col = M.data[p].j;q = cpot[col];T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].e = M.data[p].e;cpot[col]++;}}return T;}int input(int a[5][4]){ /*输入一个5行4列的矩阵*/int i,j;for(i = 0;i<=4;i++){for(j = 0;j<=3;j++){scanf("%d",&a[i][j]);}}return 0;}matrix store(int a[5][4],matrix M){ /*将稀疏矩阵中的非 0 元素存储进三元表*/int i,j,k;M.mu = 5;M.nu = 4;k = 0;for(i = 0;i<=4;i++)for(j = 0;j<=3;j++)if(a[i][j]!=0){M.data[k].i = i;M.data[k].j = j;M.data[k].e = a[i][j];k++;}return M;}int print(matrix T,int b[4][5]){ /*把矩阵 T 输出*/int i,j,p;T.mu = 4;T.nu = 5;T.tu = 5;for(i = 0;i<=T.mu-1;i++){for(j = 0;j<=T.nu-1;j++){b[i][j] = 0;for(p = 0;p<=T.tu-1;p++){if(T.data[p].i==i&&T.data[p].j==j)b[i][j] = T.data[p].e;}printf("%3d",b[i][j]);}printf("\n");}return 0;}int main(){int a[5][4],b[4][5];matrix A,B;input(a);A = store(a,A); /*一开始错在并没有把矩阵传出,下面的函数也是一样*/B = fasttranspose(A,B); /*只是还不知道为什么要这样*/print(B,b);return 0;}/* *    测试案例: *    输入: * *         0 0 1 0  *         0 0 2 0 *         0 0 3 0  *         0 0 4 0  *         0 0 5 0 * *    输出: *         0 0 0 0 0 *         0 0 0 0 0 *         1 2 3 4 5 *         0 0 0 0 0 */

原创粉丝点击