您的位置:首页 > 其它

图的存储之链式前向星

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 存储