#include "stdafx.h" #include <iostream> using namespace std; typedef int DataType; #define SIZE 100 typedef struct{ int i,j; DataType e; }Triple; typedef struct{ Triple data[SIZE+1]; int mu,nu,tu; }TSMatrix; void transpose(TSMatrix M,TSMatrix &T) { //交换行列数 T.mu = M.tu; T.nu = M.mu; T.tu = M.tu; if(T.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 input1(TSMatrix &M) { printf("input nu mu tu(With a space interval)of a Matrix: "); scanf_s("%d%d%d",M.nu,M.mu,M.tu); //row,colume,and tu printf("Please input the data of Matrix: "); for(int c=1;c<=M.tu;c++) { scanf_s("%d",&M.data[c].i); scanf_s("%d",&M.data[c].j); scanf_s("%d",&M.data[c].e); }//for } int PrintM(TSMatrix T) { printf("Matrix after transpose is: "); for(int c=1;c<=T.tu;c++) { printf("%d %d %d ",T.data[c].i,T.data[c].j,T.data[c].e); }//for return 1; }//InPut void fastTranspose(TSMatrix M,TSMatrix &T) { //交换行列数 T.mu = M.tu; T.nu = M.mu; T.tu = M.tu; int cpot[SIZE+1],num[SIZE+1]; if(M.tu) { for(int col=1;col<M.mu;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.mu;col++) cpot[col]=cpot[col-1]+num[col-1]; for(int p=1;p<M.tu;++p) { int col = M.data[p].j; int 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]; } } } /*void main() { TSMatrix M; TSMatrix T; input1(M); fastTranspose(M,T); PrintM(M); }*/