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

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

输入格式:

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

输出格式:

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

输入样例1:

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

输出样例1:

1 1 0 -5
0 0 1 1
2 2 2 2

代码

#include <bits/stdc++.h> 
using namespace std;
map<int,int>p;
struct Node{
    int x,y,z;
}a[1000000];

int main(){
    int n,m,l;
    cin>>n>>m>>l;
    for(int i=0;i<l;i++){
        cin>>a[i].x>>a[i].y>>a[i].z;
        p[a[i].y*n+a[i].x]=a[i].z;
    }
    int num=0;
    for(int i=0;i<=n*m;i++){
        if(p[i]!=0){
            p[i]=num;
            num++;
        }
    }
    for(int i=0;i<l;i++)
        cout<<p[a[i].y*n+a[i].x]<<" "<<a[i].y<<" "<<a[i].x<<" "<<a[i].z<<endl;
    return 0;
}