Description
输出稀疏矩阵的转置矩阵。(行列均不大于20)
Input
第一行输入两个正整数n和m,分别表示矩阵的行数和列数,
然后输入矩阵三元组,
最后输入(0 0 0)表示结束输入。
Output
转置后的矩阵。
-
Sample Input
4 4 1 1 1 2 1 2 3 2 3 0 0 0
-
Sample Output
1 1 1 1 2 2 2 3 3
-
code:
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct { int i,j; int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; int mu,nu,tu; }TSMatrix; void change(TSMatrix A) { int m,k; int c,r,n; for(m = 0;m < A.tu-1;m++)//先行升序 { for(k = m;k < A.tu;k++) { if(A.data[m].j > A.data[k].j) { c = A.data[m].j; A.data[m].j = A.data[k].j; A.data[k].j = c; r = A.data[m].i; A.data[m].i = A.data[k].i; A.data[k].i = r; n = A.data[m].e; A.data[m].e = A.data[k].e; A.data[m].e = n; } } } for(m = 0;m < A.tu-1;m++)//列相同,行升序 { for(k = m;k < A.tu;k++) { if(A.data[m].j == A.data[k].j && A.data[m].i > A.data[k].i) { r = A.data[m].i; A.data[m].i = A.data[k].i; A.data[k].i = r; n = A.data[m].e; A.data[m].e = A.data[k].e; A.data[k].e = n; } } } } void output(TSMatrix A) { int i; for(i=0;i<A.tu;i++) { printf("%d %d %d\n",A.data[i].j,A.data[i].i,A.data[i].e); } } int main() { TSMatrix A; int n,m,i; int x,y,z; scanf("%d %d",&n,&m); A.mu=n; A.nu=m; A.tu=0; for(i=0;;i++) { scanf("%d %d %d",&x,&y,&z); if(x==0&&y==0&&z==0) break; A.data[i].i=x; A.data[i].j=y; A.data[i].e=z; A.tu++; } change(A); output(A); return 0; }