三元组顺序表表示的稀疏矩阵转置。
输入格式:
输入第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
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
txmatrs T =new txmatrs();//装入初始矩阵
txmatrs Tb=new txmatrs();//装入转置矩阵
Scanner sc=new Scanner(System.in);
int M,N,S;//行数列数非零个数
M=sc.nextInt();
N=sc.nextInt();
S=sc.nextInt();
T.m=M;
T.n=N;
T.t=S;//对行数列数非零元素个数分别赋值
for(int i=0;i<S;i++)//存入非零元素
{
T.data[i]=new Tubnod();//将指针实体化(分配空间)
T.data[i].r=sc.nextInt();
T.data[i].c=sc.nextInt();
T.data[i].d=sc.nextInt();//存入每个非零元素的行号列号和值
//System.out.println( T.data[i].c+" "+T.data[i].d+" "+T.data[i].r);
}
Tb.m=T.n;
Tb.n=T.m;
Tb.t=T.t;//转置
int kl=0;
for(int j=0;j<Tb.m;j++)//对转置后的矩阵进行遍历
{
for(int k=0;k<S;k++)
{ //对新矩阵从上往下判断
if(T.data[k].c==j)//每个非零元素都与行号判断
{ Tb.data[kl]=new Tubnod();//实体化
Tb.data[kl].r=T.data[k].c;//行和列交换一下(转置非零元素)。
Tb.data[kl].c=T.data[k].r;
Tb.data[kl].d=T.data[k].d;
kl++;
}
}
}
for(int i=0;i<S;i++)//输出元素
{
System.out.println(Tb.data[i].r+" "+Tb.data[i].c+" "+Tb.data[i].d);
}
}
}
//定义两个class类储存必要信息
class txmatrs
{
int m,n;//行数列数
int t;//非零元素个数
Tubnod data[]=new Tubnod[225];//225个指针,注意是指针,并没有分配空间!!!
//每个数组都是Tubnod类型指针
}
class Tubnod
{
int r,c;//存入行号和列号
int d;//存入值
}