例题

题解:算法训练营

 

讲解

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 

 

posted on 2022-03-04 08:08  Josee不是john  阅读(52)  评论(0)    收藏  举报