稀疏矩阵的快速转置java_算法5-2:稀疏矩阵快速转置-题解(C语言代码)

#include #define maxsize 12500

typedef struct

{int iu;

int ju;

int e;

}triple;

typedef struct

{triple data[maxsize];

int m,n,ge;

}table;

int main()

{int m,n,i,j,x,ge;

int p,q,col,cpot[201]={0},num[201]={0};

ge=1;

table M,T;

scanf("%d%d",&m,&n);

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

{ scanf("%d",&x);

if(x!=0)

{M.data[ge].e =x;

M.data[ge].iu=i;

M.data[ge].ju=j;

ge++;

}

}

M.m=m;M.n=n;M.ge=ge;

T.m=M.n;

T.n=M.m;

T.ge=M.ge;

if(T.ge)

{for(p=1;p<=M.n;p++)

num[p]=0;

for(p=1;p<=M.ge;p++)

++num[M.data[p].ju]; //num数组计算第i列有几个非零元素

cpot[1]=1;

for(p=2;p<=M.n;p++)

cpot[p]=cpot[p-1]+num[p-1]; //cpot数组存储第i列第一个元素在转置后三元表的位置

for(p=1;p<=M.ge;p++)

{col=M.data[p].ju;

q=cpot[col];

T.data[q].e=M.data[p].e;

T.data[q].iu=M.data[p].ju;

T.data[q].ju=M.data[p].iu;

++cpot[col];

}

}

ge=1;

for(i=1;i<=T.m;i++)

{

for(j=1;j<=T.n;j++)

{if(T.data[ge].e&&(T.data[ge].iu==i)&&T.data[ge].ju==j)

{

printf("%d ",T.data[ge].e);

++ge;

}

else

printf("0 ");

}

printf("\n");

}

return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值