稀疏矩阵的转置/快速转置

 1 //稀疏矩阵的转置
 2 struct Triple {
 3     int i,j;
 4     int e;
 5 };
 6 struct TSMatrix {
 7     int mu,nu,tu;
 8     Triple data[MAXN];
 9 };
10 void TransposeSMatrix(TSMatrix M,TSMatrix &T) { //稀疏矩阵的转置
11     T.mu=M.nu;
12     T.nu=M.mu;
13     T.tu=M.tu;
14     if(M.tu) {
15         int q=1;
16         for(int col=1; col<=M.nu; col++) {
17             for(int p=1; p<=M.tu; p++) {
18                 if(M.data[p].j==col) {
19                     T.data[q].i=M.data[p].j;
20                     T.data[q].j=M.data[p].i;
21                     T.data[q].e=M.data[p].e;
22                     ++q;
23                 }
24             }
25         }
26     }
27 }
28 void FastTransposeSMatrix(TSMatrix M,TSMatrix &T) {//稀疏矩阵的快速转置
29     T.mu=M.nu;
30     T.nu=M.mu;
31     T.tu=M.tu;
32     if(M.tu) {
33         for(int col=1; col<=M.nu; ++col) {
34             num[col]=0;
35         }
36         for(int t=1; t<=M.tu; t++) {
37             num[M.data[t].j]++;
38         }
39         cpot[1]=1;
40         for(int col=2; col<=M.nu; ++col) {
41             cpot[col]=cpot[col-1]+num[col-1];
42         }
43         for(int p=1; p<=M.nu; ++p) {
44             int col=M.data[p].j;
45             q=cpot[col];
46             T.data[q].i=M.data[p].j;
47             T.data[q].j=M.data[p].i;
48             T.data[q].e=M.data[p].e;
49             ++cpot[col];
50         }
51     }
52 }

 

posted @ 2020-04-11 16:45  瓜瓜爱呱呱  阅读(691)  评论(0编辑  收藏  举报