7-2 三元组顺序表表示的稀疏矩阵转置运算Ⅰ(PTA - 数据结构)
三元组顺序表表示的稀疏矩阵转置。
·
三元组顺序表表示的稀疏矩阵转置。
输入格式:
输入第1行为矩阵行数m、列数n及非零元素个数t。
按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。
输出格式:
输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。
输入样例1:
3 4 3
0 1 -5
1 0 1
2 2 2
输出样例1:
0 1 1
1 0 -5
2 2 2
这道题算是对于数据结构 三元组、矩阵、广义表 学习心得代码,这篇博文中“快速转置算法”的拓展,更深入的了解了,更正确的实践了此算法中具体的内容。
由于题目给出的有一些内容和书本上的有些出入(例如算法中的num数组和cpot数组的行列数要从0开始算起),因此经过了一些Debug,成功改出。
代码展示:
//
// Created by DDD on 2023/11/6.
//
#include <stdio.h>
typedef struct {
int i,j;
int e;
}Tuple;
typedef struct {
Tuple data[10000];
int rows,cols,tu;
}TSMatrix;
void CreateTS(TSMatrix *TS, int row, int col, int t){ //创建三元组
TS->rows = row;
TS->cols = col;
TS->tu = t;
}
void FastTranSMatrix(TSMatrix *M,TSMatrix *T,int column){ //快速转置,M is origin
int num[column+1];
int cpot[column+1];
int col;
int q;
if(T->tu){
for (col = 1;col<=M->cols;col++)
num[col] = 0;
for (int i = 1;i<=M->tu;i++)
num[M->data[i].j]++;
cpot[1] = 1;
for(col = 1;col<=M->cols;col++)
cpot[col] = cpot[col - 1] + num[col - 1];
for(int p = 1;p<=M->tu;p++){
col = M->data[p].j;
q = cpot[col];
T->data[q].i = M->data[p].j;
T->data[q].j = M->data[p].i;
T->data[q].e = M->data[p].e;
cpot[col]++;
}
}
}
int main(){
TSMatrix ts,ns;
int row,col,t;
scanf("%d %d %d",&row,&col,&t);
CreateTS(&ts, row, col, t);
CreateTS(&ns, row, col, t);
for (int i = 0;i<t;i++){
scanf("%d %d %d",&ts.data[i+1].i,&ts.data[i+1].j,&ts.data[i+1].e);
}
FastTranSMatrix(&ts,&ns,col);
for (int i = 0; i < t; ++i) {
if(i == t-1)
printf("%d %d %d",ns.data[i].i,ns.data[i].j,ns.data[i].e);
else printf("%d %d %d\n",ns.data[i].i,ns.data[i].j,ns.data[i].e);
}
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)