稀疏矩阵的转置

采用二元数组存储,转置较简单

利用2个for循环,互换i和j的值(m,n控制数组的大小)

如下

[cce_cpp]
int i,j;

for(i=0;i<m;i++)

     for(j=0;j<n;j++)

       d[i][j]=s[j][i];
[/cce_cpp]

关于矩阵采用三元组表存储,需要:

1.讲矩阵的行列值互相交换。

2.讲三元组的i和j互换。

3.重排三元组的顺序。

关于3的具体实现

[cce_cpp]
#include <stdio.h>
#include <malloc.h>
#define Max 100
#define FALSE 0
typedef struct
{
int val;
int row,col;
}Triple;

typedef struct
{
Triple data[Max];
int m,n,len;
}TSMatrix;

TSMatrix *FastTransposeTSMatrix(TSMatrix a,TSMatrix *b)
{
int col,t,i,j;
int num[Max],cpot[Max];
b->len=a.len;b->n=a.m,b->m=a.n;
if(b->len)
{
   for(col=1;col<=a.n;col++)
    num[col]=0;
   for(t=1;t<=a.len;t++)
    num[a.data[t].col]++;
   cpot[1]=1;
   for(col=2;col<a.n;col++)
    cpot[col]=cpot[col-1]+num[col-1];
   for(i=1;i<=a.len;i++)
   {
    col=a.data[i].col;j=cpot[col];
    b->data[j].row=a.data[i].col;
     b->data[j].col=a.data[i].row;
      b->data[j].val=a.data[i].val;
      cpot[col]++;
   }
}
return(b);
}
main()
{
TSMatrix A,*B;
B=(TSMatrix *)malloc(sizeof(TSMatrix));
int i;
A.len=5;A.m=5;A.n=5;
printf("input TSMatrix a:\n");
for(i=1;i<=5;i++)
   scanf("%d,%d,%d",&A.data[i].row,&A.data[i].col,&A.data[i].val);
B=FastTransposeTSMatrix(A,B);
printf("The Transpose TSMatrix is:\n");
for(i=1;i<=5;i++)
   printf("%d,%d,%d\n",B->data[i].row,B->data[i].col,B->data[i].val);
}
[/cce_cpp]

实现后如下

稀疏矩阵的转置
稀疏矩阵的转置

“稀疏矩阵的转置”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注