我的问题并不是关于这两种搜索类型的机制。我觉得它比这更平凡 - 我不了解两者的输入和输出。更具体地说,在 CLRS 中,BFS 将图和源节点作为输入,而 DFS 仅将图作为输入。DFS 不关心你从哪里搜索吗?
这就是输入混乱。输出混乱是,在 DFS 中,当你完成后,你有一个类似表的结构记录每个节点的发现和完成时间,对吗?您如何从中提取解决方案,即从源节点到目标节点的路径?
我希望我说得通。谢谢!
编辑:这就是我所说的 DFS 不采用源节点的意思。这是来自 CLRS 的 DFS 伪代码。我看不到它在任何地方都有源节点。我看到它所做的只是遍历图中的所有节点。
DFS(G)
1 for each vertex u ∈ V[G]
2 do color[u] ← WHITE
3 π[u]← NIL
4 time ← 0
5 for each vertex u ∈ V[G]
6 do if color[u] = WHITE
7 then DFS-VISIT(u)
DFS-VISIT(u)
1 color[u] ← GRAY ✄ White vertex u has just been discovered.
2 time ← time+1
3 d[u] ← time
4 for each v ∈ Adj[u] ✄ Explore edge (u,v).
5 do if color[v] = WHITE
6 then π[v] ← u
7 DFS-VISIT(v)
8 color[u] ← BLACK ✄ Blacken u;it is finished.
9 f [u] ← time ← time+1