7-1 三元组顺序表表示的稀疏矩阵转置Ⅱ (10分)

三元组顺序表表示的稀疏矩阵转置Ⅱ。设a和b为三元组顺序表变量,分别表示矩阵M和T。要求按照a中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。

输入格式:

输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。

输出格式:

按置入b中的顺序输出置入的位置下标,转置后的三元组行标、列标和值,数据之间用空格分隔,共t行。

输入样例1:

1
2
3
4
3 4 3
0 1 -5
1 0 1
2 2 2

输出样例1:

1
2
3
1 1 0 -5
0 0 1 1
2 2 2 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;
typedef struct
{
int x,y;
int data;
}triple;

typedef struct
{
triple data[1001];
int mu,nu,tu;
}TSMatrix;

int main()
{
TSMatrix m1,m2;
int m,n,t;
cin>>m>>n>>t;
m1.mu=m;m1.nu=n;m1.tu=t;
for (int i = 0; i < t; ++i) {
cin>>m1.data[i].x>>m1.data[i].y>>m1.data[i].data;
}
m2.mu=m1.nu;m2.nu=m1.mu;m2.tu=m1.tu;
if(m2.tu)
{
int q=0;
for (int i = 0; i < m1.nu; ++i) {
for (int j = 0; j < m1.tu; ++j) {
if (m1.data[j].y==i)
{
m2.data[q].x=m1.data[j].y;
m2.data[q].y=m1.data[j].x;
m2.data[q].data=m1.data[j].data;
q++;
}
}
}
for (int k = 0; k < m1.nu; ++k) {
for (int i = 0; i < m1.tu; ++i) {
if(m2.data[i].y==k)
{
cout<<i<<" "<<m2.data[i].x<<" "<<m2.data[i].y<<" "<<m2.data[i].data<<endl;
}
}
}
}
}