三元组顺序表表示的稀疏矩阵转置Ⅱ。设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;
}
-
#include<bits/stdc++.h>
:这是一个预处理指令,用于包含C++标准库的所有头文件。 -
using namespace std;
:这是一个命名空间的声明,允许你直接使用标准库的元素,而不需要在前面加上std::
前缀。 -
struct matrix { int x, y, val; } a[1000], b[1000];
:定义了一个名为matrix
的结构体,包含三整数成员x
、y
和val
,用于表示矩阵中的元素。同时,定义了两个数组a
和b
,每个数组可以存储最多1000个matrix
结构体,用于存储原始矩阵和转置后的矩阵。 -
int n, m, t;
:定义了三个整数变量,n
和m
表示原始矩阵的行数和列数,t
表示非零元素的数量。 -
cin >> m >> n >> t;
:从标准输入中读取三个整数,分别为原始矩阵的行数、列数和非零元素数量。 -
使用一个循环来读取每个非零元素的信息,包括其行坐标
x
、列坐标y
和值val
,将这些信息存储在数组a
中。 -
int cnt = 0;
:定义一个整数变量cnt
,用于跟踪转置后的矩阵中的元素数量。 -
进入两层嵌套循环,外层循环遍历原始矩阵的列
i
,内层循环遍历非零元素数组a
。 -
在内层循环中,如果发现
a[j].y
等于当前的列i
,则表示找到了原始矩阵中在第i
列的非零元素,于是将这个元素的信息复制到转置矩阵b
中,并递增cnt
。 -
最终,
b
中存储了原始矩阵转置后的元素。 -
进入另外两层嵌套循环,外层循环遍历原始矩阵的行
i
,内层循环遍历转置后的矩阵数组b
。 -
在内层循环中,如果发现
b[j].y
等于当前的行i
,则表示找到了转置矩阵中在第i
行的非零元素,于是输出这个元素的信息,包括其索引j
、行b[j].x
、列b[j].y
和值b[j].val
。 -
最后,返回0,表示程序正常执行结束。
总体来说,这段代码首先读取原始矩阵的信息,然后进行矩阵转置操作,将转置后的矩阵的非零元素信息存储在数组b
中,最后输出转置后的矩阵的非零元素信息。