三元组顺序表表示的稀疏矩阵转置。
输入格式:
输入第1行为矩阵行数m、列数n及非零元素个数t。
按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。
输出格式:
输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。
输入样例1:
3 4 3
0 1 -5
1 0 1
2 2 2
输出样例1:
0 1 1
1 0 -5
2 2 2
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,b,c;
}s[10000];
int main(){
int n,m,t;
cin>>n>>m>>t;
for(int i=0;i<t;i++){
cin>>s[i].a>>s[i].b>>s[i].c;
swap(s[i].a,s[i].b);
}
for(int i=0;i<t;i++){
for(int j=0;j<t-1;j++){
if(s[j].a>s[j+1].a) swap(s[j],s[j+1]);
if(s[j].a==s[j+1].a&&s[j].b>s[j+1].b) swap(s[j],s[j+1]);
}
}
for(int i=0;i<t;i++){
cout<<s[i].a<<" "<<s[i].b<<" "<<s[i].c<<endl;
}
return 0;
}
-
#include<bits/stdc++.h>
:这是一个预处理指令,用于包含C++标准库的所有头文件。 -
using namespace std;
:这是一个命名空间的声明,允许你直接使用标准库的元素,而不需要在前面加上std::
前缀。 -
struct node { int a, b, c; };
:这里定义了一个名为node
的结构体,包含三整数成员a
、b
和c
,用于表示某种数据。 -
s[10000];
:这定义了一个名为s
的数组,每个元素是一个node
结构体,用于存储一些数据,数组大小为10000。 -
int main() { ... }
:主函数开始执行。 -
从标准输入中读取三个整数
n
、m
和t
,它们分别表示三个参数的值。 -
使用一个循环读取
t
次,每次读取a
、b
和c
三个整数,将这些数据存储到s
数组中,并交换a
和b
的值。这意味着a
和b
的值会互换,a
存储较小的值,b
存储较大的值。 -
接下来,使用两个嵌套的循环进行排序。这是一个冒泡排序的变种,首先按照
a
的值升序排序,如果a
相同,再按照b
的值升序排序。这样,s
数组中的元素将按照这两个条件的组合进行排序,以确保在数组s
中按特定的顺序排列。 -
最后,使用一个循环遍历
s
数组,输出排序后的数据。每个元素的a
、b
和c
的值都被打印出来,然后跟随一个换行符。这将显示排好序的数据。
总之,这段代码执行了数据的读取、交换、排序和输出,最终输出排序后的数据。排序的依据是首先按照a
的值升序,如果a
相同,再按照b
的值升序。这样的排序可以根据不同条件对数据进行排序。