#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Triple
{
int row, col, val;
}Triple;
typedef struct TriMatrix
{
Triple data[MAXSIZE];
int mu, nu, ru;
}TriMatrix;
void InitTriMatrix(TriMatrix*& A)
{
A = (TriMatrix*)malloc(sizeof(TriMatrix));
if (A == NULL) {
printf("Out of space!\n");
}
else {
A->mu = 0;
A->nu = 0;
A->ru = 0;
return ;
}
}
void Insert(TriMatrix* A, int i, int j, int x, int k) {
A->data[k].row = i;
A->data[k].col = j;
A->data[k].val = x;
A->ru = A->ru + 1;
}
void Build(TriMatrix* A)
{
int k = 0;
while (1)
{
int i, j, x;
scanf_s("%d", &i);
scanf_s("%d", &j);
scanf_s("%d", &x);
if (0 == i && 0 == j && 0 == x) break;
else {
Insert(A, i, j, x, k);
k++;
}
}
}
void Output(TriMatrix* A)
{
for (int k = 0; k < A->ru; k++)
{
printf("%d %d %d \n",A->data[k].row,A->data[k].col,A->data[k].val);
}
}
void Transform(TriMatrix *A, TriMatrix *&B)
{
int num[MAXSIZE] = { 0 }, pos[MAXSIZE] = { 0,1 }, i, m;
B->mu = A->nu;
B->nu = A->mu;
B->ru = A->ru;
for (i = 1; i <= A->nu; i++)
num[A->data[i].col]++;
for (i = 2; i <= A->nu; i++)
pos[i] = pos[i - 1] + num[i - 1];
for (i = 1; i <= A->ru; i++)
{
m = A->data[i].col;
B->data[pos[m]].row = A->data[i].col;
B->data[pos[m]].col = A->data[i].row;
B->data[pos[m]].val = A->data[i].val;
pos[m]++;
printf("%d %d %d\n", &B->data[pos[m]].row, &B->data[pos[m]].col, &B->data[pos[m]].val);
}
}
int main()
{
TriMatrix* A;
TriMatrix* B;
InitTriMatrix(A);
InitTriMatrix(B);
int r, c;
printf("请输入矩阵A的行;/n");
printf("请输入矩阵A的列;/n");
scanf_s("%d%d", &r, &c);
B->nu = A->mu = r;
B->mu = A->nu = c;
Build(A);
Transform(A, B);
Output(B);
return 0;
}
参考一下
void Transform(TriMatrix *A, TriMatrix *&B)
{
int num[MAXSIZE] = { 0 }, pos[MAXSIZE] = { 0,1 }, i, m;
B->mu = A->nu;
B->nu = A->mu;
B->ru = A->ru;
for (i = 1; i <= A->nu; i++)
num[A->data[i].col]++;
for (i = 2; i <= A->nu; i++)
pos[i] = pos[i - 1] + num[i - 1];
for (i = 1; i <= A->ru; i++)
{
m = A->data[i].col;
B->data[pos[m]].row = A->data[i].col;
B->data[pos[m]].col = A->data[i].row;
B->data[pos[m]].val = A->data[i].val;
pos[m]++;
}
Output(B);
}
int main()
{
TriMatrix* A;
TriMatrix* B;
InitTriMatrix(A);
InitTriMatrix(B);
int r, c;
printf("请输入矩阵A的行;\n");
printf("请输入矩阵A的列;\n");
scanf_s("%d%d", &r, &c);
B->nu = A->mu = r;
B->mu = A->nu = c;
Build(A);
Transform(A, B);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: