链式前向星图解
e[idx] = b;
边之终点
ne[idx] = h[a];
谓之头插之边
h[a] = idx ++;
谓之指针更新
注意:上述以a为开头的一条链上的结点,在物理上都是a的邻接点,相邻的边用idx来标明序号,相邻的边之间有映射。
链式前向星的遍历
假设顶点 u 的邻接表存储的边索引为 a → b → c → -1(-1 表示链表末尾),则遍历过程如下:
初始:i = a(链表头)。
第一次循环:处理边 a,然后 i = ne[a] = b。
第二次循环:处理边 b,然后 i = ne[b] = c。
第三次循环:处理边 c,然后 i = ne[c] = -1。
循环终止:~i = ~(-1) = 0,退出循环。
C++代码:
for(int i = h[u]; ~ i ;i = ne[i]){...
}