在学习算法spfa的过程之中,其代码的实现过程是用了链式前向星结构实现,因此了解并学习了一下链式前向星

什么是链式前向星

前向星的本质其实是静态链表,如果说邻接表存的是点的集合,那么链式前向星是存的是边的集合。

为什么要采用链式前向星

如果说邻接表是不好写但效率好,邻接矩阵是好写但效率低的话,前向星就是一个相对中庸的数据结构。前向星固然好些,但效率并不高。而在优化为链式前向星后,效率也得到了较大的提升。虽然说,世界上对链式前向星的使用并不是很广泛,但在不愿意写复杂的邻接表的情况下,链式前向星也是一个很优秀的数据结构。

主要代码实现

struct Edge
{
	int next;//下一条边的编号 
	int to;//这条边到达的点 
	int dis;//这条边的长度 
}edge[maxm];

void add_edge(int from,int to,int dis) //加入一条从from到to距离为dis的单向边 
{
	edge[++num_edge].next=head[from]; 
	edge[num_edge].to=to;//将to记录 
	edge[num_edge].dis=dis;//将dis记录 
	head[from]=num_edge;// 
}

head[i]数组与next

关于head[i]的含义,我们理解为指向 i 结点的第一条边。这是方便于我们在接下来调用的时候能够完好的访问:i结点第一条边通过head访问,剩下的边通过next指针指向。

总的来说: head[i]来指向 i 结点的第一条边 next指向下一条边

调用核心代码

for(int i=head[k];i!=0;i=edge[i].next)