1. 程式人生 > >稀疏矩陣的轉置【時間複雜度較高的】

稀疏矩陣的轉置【時間複雜度較高的】

#include <stdio.h>
#define MAXSIZE 12500
typedef int ElemType;
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;




void TransposeSMatrix(TSMatrix &M,TSMatrix &T)
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int col,p,q;
if(T.tu)
{
q=0;
for(col=0;col<M.tu;col++)
for(p=0;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;}
}
}
}
















int main()
{
TSMatrix M,T;
printf("請輸入矩陣的行數,列數:\n");
scanf("%d%d",&M.mu,&M.nu);


printf("請輸入元素個數:");
scanf("%d",&M.tu);


printf("請輸入原矩陣的各個壓縮值:\n");
for(int i=0;i<M.tu;i++)
{
scanf("%d%d%d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
}
printf("請輸出原矩陣:\n");

for(i=0;i<M.tu;i++)
{
printf("%3d%3d%3d\n",M.data[i].i,M.data[i].j,M.data[i].e);
}


printf("輸出轉置後的矩陣:\n");
    TransposeSMatrix(M,T);
for(i=0;i<T.tu;i++)
{
printf("%3d%3d%3d\n",T.data[i].i,T.data[i].j,T.data[i].e);
}
    
return 0;
}