三元组顺序表表示的稀疏矩阵转置。
输入格式:
输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。
输出格式:
输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。
输入样例1:
3 4 3
0 1 -5
1 0 1
2 2 2
输出样例1:
0 1 1
1 0 -5
2 2 2
完整代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
#define MAXSIZE 100
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;
void TransposeTSMatrix(TSMatrix M,TSMatrix *T)
{
T->mu=M.mu;
T->nu=M.nu;
T->tu=M.tu;
if(T->tu)
{
int q=0;
for(int col=0;col<M.nu;col++) //按列优先顺序转换
{
for(int 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++;
}
}
}
}
}
void PrintfMatrix(TSMatrix *M)
{
for(int i=0;i<M->tu;i++)
{
cout<<M->data[i].i<<" "<<M->data[i].j<<" "<<M->data[i].e<<endl;
}
}
int main()
{
TSMatrix matrix,T;
cin>>matrix.mu>>matrix.nu>>matrix.tu;
for(int k=0;k<matrix.tu;k++)
{
cin>>matrix.data[k].i>>matrix.data[k].j>>matrix.data[k].e;
}
TransposeTSMatrix(matrix,&T);
PrintfMatrix(&T);
return 0;
}
代码解析:
三元组顺序表的类型结构定义
typedef struct{
int i,j; //该非零元素的行下标和列下标
int e; //非零元素的值
}Triple; //(三人的、三组的)
typedef struct{
Triple data[MAXSIZE]; //非零元三元组表
int mu,nu,tu; //矩阵的行数、列数、和非零元素个数
}TSMatrix;
矩阵转置核心代码
void TransposeTSMatrix(TSMatrix M,TSMatrix *T)
{
T->mu=M.mu;
T->nu=M.nu;
T->tu=M.tu;
if(T->tu)
{
int q=0;
for(int col=0;col<M.nu;col++) //按列优先顺序转换
{
for(int 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++;
}
}
}
}
}
版权声明:本文为qq_61351908原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。