概述
链式前向星是解决图论的一种方法,一开始接触会有点绕,但是真的好用!首先要有个意识,这个方法的出发点是以边为核心建结构体,这个结构体有一个很妙的变量next,是用来存同一起点的上一条边的编号。除了结构体之外,再建一个head数组,head[i]存的是i作为起点的最后一条边的编号。通过next和head的结合,可以巧妙地进行存边、遍历等操作。
结构体
建结构体时应注意,如果题目给了m条边,应该结构体数组应该2*m个空间(因为双向)。
struct Edge {
int v, w, next;
}e[maxm<<1];
addEdge
注意如果是无向图的话,main函数加边的时候记得加两条边,即双向。
void addEdge(int u, int v, int w) {
e[cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt++;
}
遍历x为起点的边
这里的前提是将head数组初始化为-1。
for(int i = head[x]; i != -1; i = e[i].next)