首页 > 编程知识 正文

顺序存储和链式,链式绣

时间:2023-05-03 18:57:00 阅读:17680 作者:3859

一、概要我们在学习图论时,学习了图的记忆结构。 二维阵列邻接矩阵记忆。 他可以表达直觉,快速访问连接两点的边,但只适用于空间大、点少的图。 所以,我们需要能够记忆大型图的东西——链式前方星。

正向星形是一种特殊的边集数组,它按起点从小到大的顺序对边集数组中的每条边进行排序,如果起点相同,则按终点从小到大的顺序进行排序,并记录以某一点为起点的所有边在数组中的起始位置和存储长度。

二、链式前向星的基本原理首先列入下图。

点1是指点2、点3、点4。

链星是以边缘为中心的保存方式,需要利用结构体来划定边缘。 这样可以使图更清晰。

首先,必须创建边缘数组edge[ ]。 一般来说,需要记录各种元素,如下一条边的编号、边到达的点、边的长度等

结构边缘{ int next; //下一边的编号int to; //这一带到达的地点int dis; //这一带的长度}edge[maxm]; 然后添加已知边

int main () {num_edge=0; //定义边数,后面直接scanf('%d%d ',n,m ); //输入点数和边数for(intI=1; i=m; I )//记录边缘数(scanf('%d%d%d )、u、v、d ); //输入权重从哪里来到哪里的add_edge(u,v,d ); //正存图add_edge(v,u,d ); //有向图时,试着添加容易添加的add函数,将图表反向保存}。

从voidadd_edge(intfrom,int to,int dis ) from到to的距离为dis的单向边) { edge [ num _ edge ].next=head [ from ]; edge[num_edge].to=to; //to为edge[num_edge].dis=dis;//将dis设置为head[from]=num_edge; //}过了这一步可能有点迷茫,下面是保存图的模拟:

这边的模拟结束后,得到下图。

突然之间,你可能会被想象成这样:

最后一部分是调用,它根据你的主题决定。 但是,不能离开下一个进程的核心。

for(intI=head[k]; I!=0; i=edge[i].next )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。