例题
题解:算法训练营
讲解
https://blog.csdn.net/weixin_43846139/article/details/88416230?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
head数组:下标表示顶点的编号,数组中的值表示该顶点关联的第一条边
它主要用于表示以i为起点的第一条边存储的位置。实际上你会发现这里的第一条边存储的位置其实在以i为起点的所有边的最后输入的那个编号,因为这里使用的是头插法。
这样在遍历时是倒着遍历的,也就是说与输入顺序是相反的,不过这样不影响结果的正确性.
edge数组结构体:下标i表示第i条边的编号,一般由input顺序自然决定。
edge[i].to表示第i条边的终点
edge[i].next表示与第i条边同起点的下一条边的存储位置,使用头插法,由edge[].next=head[]实现。
图解

思考:如果我想使用尾插法,怎么做?
比如加入以i为起点的边k,则是先通过head[i]找到当前链表的末尾j,修改edge[j].next的值为k。
edge[k].next尚为-1。
再把head[i]修改为k
为了简化写代码的复杂度,就增加了理解的复杂度?捂脸
与邻接表的区别
1. 邻接表没有对边标号,
链式前向星对边标号。
与邻接表的共通之处
1. 都是头插法。
邻接表图例

代码

初始化:
head[ ]全部初始化为-1

转载请注明出处:https://www.cnblogs.com/rakugaki/
浙公网安备 33010602011771号