三元组顺序表表示的稀疏矩阵转置Ⅱ。设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; } } } } }
|