矩阵转置的C++描述 with 稀疏矩阵行逻辑

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

Leave a Reply

Your email address will not be published. Required fields are marked *