稀疏矩阵的转置/快速转置
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 }
越努力越幸运