#include<stdio.h>
#define MAX_SIZE 100
#define OK 1
#define ERROR -1
typedef int ElemType;
typedef int Status;
typedef struct {
int i, j;
ElemType e;
}Triple;
typedef struct {
Triple data[MAX_SIZE];
int mu, nu, tu;
}TSMatrix;
Status creatSMatrix(TSMatrix &M) {
int row, col, k = 0;
scanf("%d %d", &M.mu, &M.nu);
for(row = 1; row <= M.mu; row++) {
for(col = 1; col <= M.nu; col++) {
scanf("%d", &M.data[k].e);
if(M.data[k].e) {
M.data[k].i = row;
M.data[k].j = col;
k++;
}
}
}
M.tu = k;
// printf("k = %d\n", k);
return OK;
}
Status printfMatrix(TSMatrix M) {
int row, col, temp, k = 0;
// printf("T.mu=%d T.nu=%d\n", M.mu, M.nu);
for(row = 1; row <= M.mu; row++) {
for(col = 1; col <= M.nu; col++) {
if(row == M.data[k].i && col == M.data[k].j) {
printf("%d ", M.data[k].e);
k++;
}
else
printf("0 ");
}
printf("\n");
}
}
Status transportSMatrix(TSMatrix M, TSMatrix &T) {
int col, p, k = 0;
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
for(col = 1; col <= M.nu; col ++){
for(p = 0; p < M.tu; p ++){
if(col == M.data[p].j) {
T.data[k].i = M.data[p].j;
T.data[k].j = M.data[p].i;
T.data[k].e = M.data[p].e;
k ++;
}
}
}
// printf("M.data[1].j=%d k = %d\n", M.data[1].j, k);
}
Status destoryMatrix(TSMatrix &M){
M.mu = M.nu = M.tu = 0;
}
int main() {
TSMatrix M, T;
creatSMatrix(M);
transportSMatrix(M, T);
printfMatrix(T);
destoryMatrix(M);
return 0;
}