⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 稀疏矩阵的快速转置.cpp

📁 实现了循环便利一棵树
💻 CPP
字号:
#define MaxSize 20
#include <stdio.h>
typedef struct { int i, j;  int e; } Triple;
typedef struct
{ Triple data[MaxSize+1];
  int mu, nu, tu;
} TSMatrix;

void main()
{  TSMatrix M,T;
   int a,b,c,p,x,y;
   a=b=c=x=y=0; p=1;
   M.mu=M.nu=M.tu=0;
   void FastTransposeSMatrix(TSMatrix M, TSMatrix &T);
   void print(TSMatrix M);
   printf("请输入要转置的矩阵的行数与列数(输入格式为:行数,列数):\n");
   scanf("%d,%d",&x,&y);
   M.mu=x;M.nu=y;
   printf("请按照三元表顺序输入(输入格式为:行值,列值,数值,(0,0,0 结束输入)):\n");
   while(p<MaxSize)
   { scanf("%d,%d,%d",&a,&b,&c);
     if(c==0) break;
     M.data[p].i=a;
     M.data[p].j=b;
     M.data[p].e=c;
     M.tu+=1;
     p+=1;
   }//求出M的相关信息
   FastTransposeSMatrix(M,T);
   printf("原矩阵为:\n");
   print(M);
   printf("转置后为:\n");
   print(T);
}

void FastTransposeSMatrix(TSMatrix M, TSMatrix &T)
{  int t,col,p,q;
   int num[MaxSize],cpot[MaxSize];
   T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;
   if (T.tu)
   { for(col=1; col<=M.nu; ++col) num[col]=0;
     for(t=1; t<= M.tu; ++t) ++num[M.data[t].j];//求M中每一列含非零元个数
     cpot[1]=1;
	  //求第col列中第一个非零元在M.data中的序号
     for(col=2; col<=M.nu; ++col) cpot[col]=cpot[col-1]+num[col-1];
     for(p=1; p<=M.tu; ++p)
     { col=M.data[p].j; 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];
     }//for
   }//if
}

void print(TSMatrix M)
{  int p,q,s;
   for(s=1,p=1;p<=M.mu;p++)
   {  if(M.data[s].i==p)
      { for(q=1;q<=M.nu;q++)
		   if(M.data[s].j==q&&M.data[s].i==p)
	          printf("%d  ",M.data[s].e),s+=1;
	       else printf("0  ");
        printf("\n");
      }
      else  { for(q=0;q<M.nu;q++) printf("0  ");
              printf("\n");
			}
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -