图的存储之链式前向星
2017-11-08 21:56
183 查看
一般的前向星是经过排序将相同起点的边放在一起,并记录每个点对应的边的起始位置与终止位置,不展开讲述。
链式前向星则不用排序,首先定义数组edge,记录每条边的信息,则读入第i条边的信息:从u到v权值为w的边时,edge[i].to负责记录这条边的终点,edge[i].w负责记录这条边的边权,那么怎么记录起点呢?这里就用到了edge[i].next与head[u]。edge[i].next,是类似于递归的方式调用边,如:
第1、3、5条边记录的是起点为1的边的信息,则:edge[1].next=0,edge[3].next=1,edge[5].next=3;调用的时候,用完第5条边,就通过edge[5].next到第3条边,最后到第1条边,终止;
head[u]则记录以结点u为起点编号最大的边,在上述情况中,head[1]=5;则要调用以1为起点的点,从head[1]开始调用就可以了。
如何实现?
读入后,若head[u]=0,则edge数组中没有以该点为起点的边,那么edge[i].next=0;若head[u]!=0,则edge[i].next=head[u],head[u]=i;
具体例子分析请看http://blog.csdn.net/acdreamers/article/details/16902023。
链式前向星则不用排序,首先定义数组edge,记录每条边的信息,则读入第i条边的信息:从u到v权值为w的边时,edge[i].to负责记录这条边的终点,edge[i].w负责记录这条边的边权,那么怎么记录起点呢?这里就用到了edge[i].next与head[u]。edge[i].next,是类似于递归的方式调用边,如:
第1、3、5条边记录的是起点为1的边的信息,则:edge[1].next=0,edge[3].next=1,edge[5].next=3;调用的时候,用完第5条边,就通过edge[5].next到第3条边,最后到第1条边,终止;
head[u]则记录以结点u为起点编号最大的边,在上述情况中,head[1]=5;则要调用以1为起点的点,从head[1]开始调用就可以了。
如何实现?
读入后,若head[u]=0,则edge数组中没有以该点为起点的边,那么edge[i].next=0;若head[u]!=0,则edge[i].next=head[u],head[u]=i;
具体例子分析请看http://blog.csdn.net/acdreamers/article/details/16902023。
相关文章推荐
- Civilization CodeForces - 455C (并查集+树的直径+推公式 +链式前向星存储边)
- 链式前向星存储结构
- 采用链式前向星结构存储的图深搜和广搜算法
- 图的链式前向星存储结构
- 链式前向星|前向星|STL中vector模拟链表(图的存储)
- 图的链式前向星存储结构
- 边存储结构体:链式前向星
- 链式前向星存储实现BFS
- 图的存储结构---(*链式前向星*)
- 链式前向星 存储图的信息
- dp+搜索(图,链式前向星存储)-1
- 图的存储(链式前向星)
- 图的存储(2)---链式前向星的学习
- 图的存储(链式前向星)
- 边存储结构体:链式前向星
- 图的(链式)前向星存储结构
- 【图论】数组模拟邻接表存储(链式前向星)
- 数据结构-栈的链式存储
- 线段树,实例,代码实现,区间最值,区间求和,顺序存储,链式存储
- 栈的顺序存储与链式存储