在学习算法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) ……

阅读全文