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;
}