链式前向星
今日水博客(
众所周知我们使用链式前向星存图会有这样几句话:
struct edge{int to,nxt;}e[maxm];
e[++cnt]=(edge){v,h[u],val};
h[u]=cnt;
for(int i=h[u];i;i=e[i].nxt)
{
int p=e[i].to;
//...
}
接下来就简单解释一下。
比如说我们要连边 \(u\rarr v\)。我们假设之前存的一条从 \(u\) 出发的边时 \(u\rarr v'\)。
那么我们为了能遍历到之前那条边,我们会给一条到先前那条边的指针。之前从 \(u\) 连出的头指针所指向的就被替换成了新的边。
具体在代码上实现,h[u] 是点连出的第一条边,to是到达的点,nxt指向下一条边。
建边时,我们将现在的边的 nxt 指向先前边的编号 h[u],然后将 h[u] 换成刚刚建的边的编号。
遍历时就是用 nxt 指针跳。