Status TransposeMatrix(Matrix M,Matrix &T)
{
T.nu=M.mu;
T.mu=M.nu;
int *num,i,tmp;
num=new int[T.mu+1];
memset(num,0,sizeof(int)*(T.mu+1));
if(num==NULL)
return WRONG;
for(i=1;i<=M.tu;i++)
num[M.data[i].j]++;
T.rpos[1]=1;
for(i=2;i<=T.mu;i++)
T.rpos[i]=T.rpos[i-1]+num[i-1];
for(i=1;i<=T.mu;i++)
num[i]=T.rpos[i];
for(i=1;i<=M.tu;i++)
{
tmp=num[M.data[i].j]++;
T.data[tmp].i=M.data[i].j;
T.data[tmp].j=M.data[i].i;
T.data[tmp].e=M.data[i].e;
}
delete num;
}
矩阵转置的C++描述 with 稀疏矩阵行逻辑
Leave a reply