#include<iostream>
#define MAX 1000
using namespace std;
typedef struct Elem{
int row,col,value;
}Elem;
typedef struct Matrix{
Elem elems[MAX+1];
int m,n,len;
}Matrix;
int position[MAX];//每行开头元素的位置
int num[MAX];//每行的元素个数
Matrix *S=(Matrix*)malloc(sizeof(Matrix));
Matrix *D=(Matrix*)malloc(sizeof(Matrix));
//创建稀疏矩阵
void CreateMatrix(Matrix *M)
{
int row,col,value,count=1,m,n,len;
cout<<"输入矩阵行数,列数,元素个数\n";
cin>>m>>n>>len;
M->m=m;M->n=n;M->len=len;
while(cin>>row>>col>>value&&row!=0&&col!=0&&value!=0)
{
M->elems[count].row=row;
M->elems[count].col=col;
M->elems[count].value=value;
count++;
}
}
//稀疏矩阵转置
void Transfer(Matrix *S)
{
int col=0,i,q;
D->m=S->n;D->n=S->m;
D->len=S->len;
for(i=1;i<=S->n;i++)num[i]=0;
for(i=1;i<=S->len;i++)
num[S->elems[i].col]++;
position[1]=1;
for(i=2;i<=S->n;i++)
position[i]=position[i-1]+num[i-1];
for(i=1;i<=S->len;i++)
{
col=S->elems[i].col;
q=position[col];
D->elems[q].col=S->elems[i].row;
D->elems[q].row=S->elems[i].col;
D->elems[q].value=S->elems[i].value;
position[col]++;
}
}
//输出转置后的矩阵
void procOutput()
{
int i;
cout<<"转置后的矩阵\n";
for(i=1;i<=D->len;i++)
cout<<D->elems[i].value<<" ";
cout<<"\n";
}
int main()
{
char cmd;
do{
CreateMatrix(S);
Transfer(S);
procOutput();
cout<<"继续吗y/Y\n";
cin>>cmd;
}while(cmd=='Y'||cmd=='y');
return 0;
}
稀疏矩阵转置
最新推荐文章于 2021-04-28 22:36:48 发布
本文介绍了一种用于实现稀疏矩阵转置的C++程序设计方法。通过定义稀疏矩阵结构并使用动态内存分配来存储矩阵数据,该程序能够接受用户输入的稀疏矩阵,并完成矩阵的转置操作。此外,还提供了输出转置后矩阵的功能。
5105

被折叠的 条评论
为什么被折叠?



