实现的目的就是题目中所说的
输入:
先输入矩阵的行数和列数再输入矩阵
4 4
0 0 1 1
0 2 3 0
9 0 7 0
0 0 0 4
#include<iostream>
#include<queue>
using namespace std;
typedef struct TriNode //三元组内每一行本身的行,列,值
{
int r;
int l;
int data;
} TriNode;
struct TriTable //三元组本身,可能包含多行
{
TriNode *datas;
int mu,nu,tu; //这里的mu nu指的并不是三元组本身的属性,而是要求三元组的稀疏矩阵的行数与列数,只有tu确实是三元组的行数
};
int creatTriTable(TriTable &T,int matrix[],int m,int n)//创建原稀疏矩阵的三元组
{
T.mu=m;
T.nu=n;
T.datas=new TriNode[m*n];
int numble=0;
for(int i=0;i<m*n;i++)
{
if(matrix[i]!=0)
{
T.datas[numble]={i/n,i%n,matrix[i]};
numble++;
}
}
T.tu=numble;
return 0;
}
int restTriTable(TriTable T, TriTable &BT,int m,int n) //将三元组转置
{
BT.datas=new TriNode[m*n]; //先要开辟空间
BT.mu=T.nu;
BT.nu=T.mu;
BT.tu=T.tu;
for(int i=0;i<T.tu;i++)
{
BT.datas[i].r=T.datas[i].l;
BT.datas[i].l=T.datas[i].r;
BT.datas[i].data=T.datas[i].data;
//BT.datas[i]={T.datas[i].l,T.datas[i].r,T.datas[i].data};
}
return 0;
}
int madenewmatrix(TriTable T) //根据转置过的新的三元组生成转置后的稀疏矩阵并输出
{
int newmatrix[T.mu][T.nu];
for(int i=0;i<T.mu;i++)
{
for(int j=0;j<T.nu;j++)
{
newmatrix[i][j]=0;
}
}
int numble=T.tu;
for(int i=0;i<numble;i++)
{
int R,L;
R=T.datas[i].r;
L=T.datas[i].l;
newmatrix[R][L]=T.datas[i].data;
}
for(int i=0;i<T.mu;i++)
{
for(int j=0;j<T.nu;j++)
{
cout<<newmatrix[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
int print(TriTable BT)
{
for(int i=0;i<BT.tu;i++)
{
cout<<BT.datas[i].r<<" "<<BT.datas[i].l<<" "<<BT.datas[i].data<<endl;
}
return 0;
}
int main()
{
int m,n;
cin>>m>>n;
int matrix[m*n];
for(int i=0;i<n*n;i++)
{
cin>>matrix[i];
}
TriTable T;
TriTable BT;
creatTriTable(T,matrix,m,n);
//print(T);
restTriTable(T,BT,m,n);
//print(BT);
madenewmatrix(BT);
}