#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:\n");
scanf_s("%d%d%d",M.nu,M.mu,M.tu); //row,colume,and tu
printf("Please input the data of Matrix:\n");
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:\n");
for(int c=1;c<=T.tu;c++)
{
printf("%d %d %d\n",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);
}*/