#include <iostream>
using namespace std;
#define maxsize 100
typedef int ElemType;
//先定义一个三元组结构
typedef struct{
int r;//行
int c;//列
ElemType value;
}TupNode;
//三元组顺序表
typedef struct{
int rows;
int cols;
int nums;
TupNode *data;
}TSMa;
//稀疏矩阵三元组表示初始化
void InitTSMa (TSMa &SM,int R,int C);
void CreateSMatrix(TSMa &SM);
void PrintSMatrix(TSMa SM);
int main()
{
TSMa SM;
int R,C;
cin>>R>>C;
InitTSMa(SM,R,C);
CreateSMatrix(SM);
PrintSMatrix(SM);
// return 0;
}
void InitTSMa (TSMa &SM,int R,int C)
{
SM.cols=C;
SM.rows=R;
SM.nums=0;
SM.data=new TupNode [maxsize];
}
void CreateSMatrix(TSMa &SM)
{
cin>>SM.nums;
for(int i=0;i<SM.nums;i++)
{
cin>>SM.data[i].r>>SM.data[i].c>>SM.data[i].value;
}
}
void PrintSMatrix(TSMa SM)
{
cout<<SM.rows<<" "<<SM.cols<<" "<<SM.nums<<endl;
for(int i=0;i<SM.nums;i++)
cout<<SM.data[i].r<<" "<<SM.data[i].c<<" "<<SM.data[i].value<<endl;
}
#include<iostream>
using namespace std;
#define MaxSize 100
typedef int ElemType;
//三元组结构体
typedef struct
{
int row,col; //行、列
ElemType value; //值
}Triple;
//稀疏矩阵的三元组表示
typedef struct
{
int Rows, Cols, Terms; //行数、列数、非零元素个数
Triple *data;
}SparseMatrix;
//稀疏矩阵三元组表示初始化
void InitSMatrix (SparseMatrix &Sm,int Rw, int Cl)
{
Sm.Rows = Rw;
Sm.Cols = Cl;
Sm.Terms = 0;
Sm.data = new Triple[MaxSize]; //三元组表
};
void CreateSMatrix(SparseMatrix &A) //建立三元组表示的稀疏矩阵
{
int i,m,n;
ElemType e;
//cout<<"请输入矩阵的非零元素个数:"<<endl;
cin>>A.Terms;
for(i = 0; i<A.Terms; i++)
{
//cout<<"请按行序输入第"<<i+1<<"个非零元素的行,列,元素值:(以空格隔开)"<<endl;
cin>>m>>n>>e;
A.data[i].row = m; //行下标
A.data[i].col = n; //列下标
A.data[i].value = e; //该下标所对应的值
}
}
void PrintSMatrix(SparseMatrix A)
{
int i;
//cout<<"行,列,非零元素个数为:";
cout<<A.Rows<<" "<<A.Cols<<" "<<A.Terms<<endl;
//cout<<"稀疏矩阵的三元组表示为:"<<endl;
for(i=0;i<A.Terms;i++)
cout<<A.data[i].row<<" "<<A.data[i].col<<" "<<A.data[i].value<<endl;
}
void FastTranspos(SparseMatrix A, SparseMatrix &C);//转置结果在C中
int main(int argc, const char * argv[]) {
SparseMatrix A,C;
int Rows,Cols;
//cout<<"请输入矩阵的总行数:"<<endl;
cin>>Rows;
//cout<<"请输入矩阵的总列数:"<<endl;
cin>>Cols;
InitSMatrix(A,Rows,Cols);//初始化
InitSMatrix(C,Cols,Rows);//初始化
CreateSMatrix(A);//输入稀疏矩阵
FastTranspos(A, C);
PrintSMatrix(C);//输出稀疏矩阵
return 0;
}
//三元组表示的稀疏矩阵的快速转置
void FastTranspos(SparseMatrix A, SparseMatrix &C) //转置结果在C中
{
int rowsize [A.Cols];
int rowstart[A.Cols];
C.Cols=A.Rows;C.Rows=A.Cols;C.Terms=A.Terms;
if(A.Terms>0)
{
for(int i=0;i<A.Cols;i++) rowsize[i]=0;
for(int i=0;i<A.Terms;i++)
{
rowsize[A.data[i].col]++;
}
rowstart[0]=0;
for(int i=1;i<A.Terms;i++)
{
rowstart[i]=rowstart[i-1]+rowsize[i-1];
}
for(int i=0;i<A.Terms;i++)
{
int j=rowstart[A.data[i].col];//j代表这是当前旧三元表第i元素新三元组的下标
C.data[j].col=A.data[i].row;
C.data[j].row=A.data[i].col;
C.data[j].value=A.data[i].value;
rowstart[A.data[i].col]++;
}
}
}