图的存储
存储技巧:
一 . 邻接矩阵
二 . 邻接表
1. 手工建立动态链表 ( a->next, b->next ...)
2. 手工建立静态链表: ( 假设一条有向边 <u,v>,u 是起点 ,v 是终点 )
int head[MAXV],next[MAXE],e[MAXE], tot;
// head[i] 表示顶点 i 所邻接的第一条边在边表 e 中的位置(下标)
// e[i] 表示第 i 条边所对应的终点 v 的编号
// next[i] 边表 e 中第 i 条边所对应的起点 u 的邻接表中下一条边在边表 e 中的位置
典型的加边 <u,v> 过程:
tot++;
e[tot] = v; next[tot] = head[u]; head[u] = tot;
典型的遍历顶点 u 的所有邻接点的过程:
int x = head[u];
while (x) {
int v = e[x]; // v 和 u 邻接
x = next[x];
}