链式前向星

发现现在的博客都是相互抄啊,也看不懂博客上在讲啥。

链式前向星是用来存储图的的一种结构。链式前向星最关键的一点在我看来是逆序思维。把拥有一个起点的全部用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为起点的最后一条边的序号 
    
}
原文地址:https://www.cnblogs.com/rainyskywx/p/10402381.html