Edge[i].Next=Head[N]; Head[N]=idx++; 从而 Head 与 Next 数组实现链式向前星的整个过程,
Head 相当于链表的有实际含义的头节点 Next 保存链表中的节点,但值得注意的是 Next 与 Head 都是通过保存下标值的方式实现的 相当于:索引式链表。
End 为终点,Value 为权值,先不提 而 Next 就相当于链表中的节点的位置,而没有头节点 Head ,是无法提取的。 保存下标值的方式很有趣,虽然开始理解起来有点怪。
int i=Head[S]; 此时 i 为最后一次保存 S 点数组的下标值,也就是最后一次输入的 S 点数据 Edge[i].End 便为最后一次输入 S 点的终点,Value 也是同理,而 S 作为出发点,不再多提
之后很关键,i=Edge[i].Next,要知道,每次的 Edge[i].Next 都是由 Head 变化而来 意思就是,i=Edge[i].Next,此后的 i 为倒数第二次输入 S 点数组的下标值! i=Edge[Head[S]].Next;之后 i=Edge[Edge[Head[S]].Next;].Next; 从而反复循环,直到,下一条边为 0 时,便是最后一次输入的 S 点的数组的下标值 因为 最开始时,Edge[i].Next=Head[S]=0;