发现现在的博客都是相互抄啊,也看不懂博客上在讲啥。
链式前向星是用来存储图的的一种结构。链式前向星最关键的一点在我看来是逆序思维。把拥有一个起点的全部用head数组加结构体里的next链接起来,这些边的存储顺序不一定是连续的,这是和前向星的区别。此外head[u]存储的是以u为起点的最后一条被输入进去的边,比如同起点的几条边输入数顺序为(1,3 ),(1,5),(1,7)则 head[1]保存 的是最后一条边(1,7)的存储位置 。最后顺着head数组就可以从后往前找到所有同一起点的边。下面上代码给大家解释一下。
int cnt=0; struct Edge{ int next;//保存了与这条边同起点的边的上一条边的位置,eg:输入顺序(1,2),(1,5),若当前这条边为(1,5),则next就指的是(1,2)这条边的编号 int to;//保存了边的终点 int w;//保存了边的权值 }edge[maxn]; void add(int u,int v,int w) { edge[cnt].next=head[u];//初始head全部看成-1即可 edge[cnt].to=v; edge[cnt].w=w; head[u]=cnt++;//head[u]保存当前输入的以u为起点的最后一条边的序号 }