这是我的第一篇博文,本来我并没有写博文的打算,但是做这道实验的时候把我气到了。先说一个最重要的坑,实验中的矩阵它的行列是从零开始的,一个矩阵的行和列竟然从零开始计算,估计只有你校的样例才会如此逆天,所以,这也就意味这测试样例中会出现零行,零列的情况。还有的就是一些输入方面的坑,可以选择输入一个然后用getchar吃一个的方式。
排序过程我放在PrintMatrix函数中,这个比较简单,也有很多方式可以使用,不再赘述,有需要可以参考我的代码。
最后祝诸君学业有成,希望各位可以点赞支持。
参考博文,(40条消息) 西工大NOJ数据结构实验——2.1稀疏矩阵转置_没耳朵的Rabbit的博客-CSDN博客
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct {
int row;
int col;
ElementType value;
} Triple, *PTriple;
typedef struct {
PTriple tri;
int row_len;
int col_len;
int num;
} Matrix, *PMatrix;
void InitMatrix(PMatrix, int, int);
void CreateMatrix(PMatrix);
void RankTranspose(PMatrix);
void PrintMatrix(PMatrix);
int main() {
int row, col;
scanf("%d %d", &row, &col);
getchar();
PMatrix matrix = (PMatrix) malloc(sizeof(Matrix));
InitMatrix(matrix, row, col);
CreateMatrix(matrix);
RankTranspose(matrix);
PrintMatrix(matrix);
free(matrix->tri);
free(matrix);
return 0;
}
void InitMatrix(PMatrix matrix, int row, int col) {
matrix->col_len = col;
matrix->row_len = row;
matrix->num = 0;
matrix->tri = (PTriple) malloc(sizeof(Triple) * (row * col + 1));
}
void CreateMatrix(PMatrix matrix) {
int m, n, value;
while (1) {
scanf("%d",&m);
getchar();
scanf("%d",&n);
getchar();
scanf("%d",&value);
getchar();
if (m == 0&&n==0&&value==0)
break;
matrix->tri[matrix->num].row = m;
matrix->tri[matrix->num].col = n;
matrix->tri[matrix->num].value = value;
matrix->num++;
}
}
void RankTranspose(PMatrix matrix) {
int t = matrix->col_len;
matrix->col_len = matrix->row_len;
matrix->row_len = t;
for (int i = 0; i < matrix->num; i++) {
int temp = matrix->tri[i].row;
matrix->tri[i].row = matrix->tri[i].col;
matrix->tri[i].col = temp; // 转置
}
}
void PrintMatrix(PMatrix matrix) {
for (int i = 0; i < matrix->row_len; i++) {
for (int j = 0; j < matrix->num; j++) {
if (matrix->tri[j].row == i) {
printf("%d %d %d\n", matrix->tri[j].row, matrix->tri[j].col, matrix->tri[j].value);
}
}
}
}