模板代码#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
int idx;
int h[N], e[N], ne[N], w[N;]
// 注意这里要初始化 head 为 -1
memset(h, 0xff, sizeof(h));
// 加入有向边 (x, y),权值为 z
void add(int x, int y, int z) {
// 真实数据
e[idx] = y, w[idx] = z;
// 在表头 x 处插入
ne[idx] = h[x], h[x] = idx++;
}
// 访问从 x 出发的所有边,注意这里终止条件的不同
for (int i = h[x]; ~i; i = ne[i]) {//~i表示i不等于-1
int y = e[i], z = w[i];
}
|
邻接表构成的数据结构图示#
注意这里有个容易搞混的点,每条链表上挂的是从对应头结点的所有出边,而不是图中的一条路径。
邻接表代码
邻接表解释
y总数据结构笔记一