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];}}}