三元组顺序表表示的稀疏矩阵转置Ⅱ(数据结构)

三元组顺序表表示的稀疏矩阵转置Ⅱ。设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;
struct matrix{
    int x,y,val;
}a[1000],b[1000];
int main(){
    int n,m,t;
    cin>>m>>n>>t;
    for(int i=0;i<t;i++){
        cin>>a[i].x>>a[i].y>>a[i].val;
    }
    int cnt=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<t;j++){
            if(a[j].y==i){
                b[cnt].x=a[j].y;
                b[cnt].y=a[j].x;
                b[cnt].val=a[j].val;
                cnt++;
            }
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<t;j++){
            if(b[j].y==i){
                cout<<j<<" "<<b[j].x<<" "<<b[j].y<<" "<<b[j].val<<endl;
            }
        }
    }
    return 0;
}

  1. #include<bits/stdc++.h>:这是一个预处理指令,用于包含C++标准库的所有头文件。

  2. using namespace std;:这是一个命名空间的声明,允许你直接使用标准库的元素,而不需要在前面加上 std:: 前缀。

  3. struct matrix { int x, y, val; } a[1000], b[1000];:定义了一个名为matrix的结构体,包含三整数成员xyval,用于表示矩阵中的元素。同时,定义了两个数组 ab,每个数组可以存储最多1000个matrix结构体,用于存储原始矩阵和转置后的矩阵。

  4. int n, m, t;:定义了三个整数变量,nm表示原始矩阵的行数和列数,t表示非零元素的数量。

  5. cin >> m >> n >> t;:从标准输入中读取三个整数,分别为原始矩阵的行数、列数和非零元素数量。

  6. 使用一个循环来读取每个非零元素的信息,包括其行坐标x、列坐标y和值val,将这些信息存储在数组a中。

  7. int cnt = 0;:定义一个整数变量cnt,用于跟踪转置后的矩阵中的元素数量。

  8. 进入两层嵌套循环,外层循环遍历原始矩阵的列i,内层循环遍历非零元素数组a

  9. 在内层循环中,如果发现a[j].y等于当前的列i,则表示找到了原始矩阵中在第i列的非零元素,于是将这个元素的信息复制到转置矩阵b中,并递增cnt

  10. 最终,b中存储了原始矩阵转置后的元素。

  11. 进入另外两层嵌套循环,外层循环遍历原始矩阵的行i,内层循环遍历转置后的矩阵数组b

  12. 在内层循环中,如果发现b[j].y等于当前的行i,则表示找到了转置矩阵中在第i行的非零元素,于是输出这个元素的信息,包括其索引j、行b[j].x、列b[j].y和值b[j].val

  13. 最后,返回0,表示程序正常执行结束。

总体来说,这段代码首先读取原始矩阵的信息,然后进行矩阵转置操作,将转置后的矩阵的非零元素信息存储在数组b中,最后输出转置后的矩阵的非零元素信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值