它突然出现在我的脑海中。
为什么我们在 BFS 图遍历中只使用 2 种颜色
DFS 需要 3 个吗?
例如:来自维基百科:
BFS:
procedure BFS(G,v):
2 create a queue Q
3 enqueue v onto Q
4 mark v
5 while Q is not empty:
6 t ← Q.dequeue()
7 if t is what we are looking for:
8 return t
9 for all edges e in G.adjacentEdges(t) do
12 u ← G.adjacentVertex(t,e)
13 if u is not marked:
14 **mark u**
15 enqueue u onto Q
16 return none
文件系统:
procedure DFS(G,v):
2 label v **as explored**
3 for all edges e in G.adjacentEdges(v) do
4 if edge e is unexplored then
5 w ← G.adjacentVertex(v,e)
6 if vertex w is unexplored then
7 label e as a **discovery edge**
8 recursively call DFS(G,w)
9 else
10 label e as a **back edge**
为什么 DFS 2 种颜色不够用?为什么 BFS 会减少 3 种颜色?
这是另一个 BFS(这次是 3 种颜色):