Transpose / fast transpose of sparse matrix

1  // Transpose of sparse matrix 
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) { // Transpose of sparse matrix 
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) { // fast transpose of sparse matrix 
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 }

 

//稀疏矩阵的转置struct Triple {int i,j;int e;};struct TSMatrix {int mu,nu,tu;Triple data[MAXN];};void TransposeSMatrix(TSMatrix M,TSMatrix &T) { //稀疏矩阵的转置T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;if(M.tu) {int q=1;for(int col=1; col<=M.nu; col++) {for(int p=1; p<=M.tu; p++) {if(M.data[p].j==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;++q;}}}}}void FastTransposeSMatrix(TSMatrix M,TSMatrix &T) {//稀疏矩阵的快速转置T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;if(M.tu) {for(int col=1; col<=M.nu; ++col) {num[col]=0;}for(int t=1; t<=M.tu; t++) {num[M.data[t].j]++;}cpot[1]=1;for(int col=2; col<=M.nu; ++col) {cpot[col]=cpot[col-1]+num[col-1];}for(int p=1; p<=M.nu; ++p) {int 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];}}}

Guess you like

Origin www.cnblogs.com/aiqinger/p/12680824.html