我知道这个特定问题的答案是 O(V + E),对于像树这样的图形,这是有道理的,因为每个顶点只被探索一次。
但是,假设图中有一个循环。
例如,让我们使用一个有四个顶点 ABCD 的无向图。
A 连接到 B 和 C,B 和 C 都连接到 D。所以总共有四个边。A->B、A->C、B->D、C->D,反之亦然。
让我们做 DFS(A)。
它将首先探索 B,然后探索 B 的邻居 D 和 D 的邻居 C。之后,C 将没有任何边,所以它会回到 D 和 B,然后是 A。
然后 A 将遍历它的第二条边并尝试探索 C,因为它已经探索过了,所以它不会做任何事情并且 DFS 将结束。
但是在这里顶点“C”已经被遍历了两次,而不是一次。显然,最坏情况的时间复杂度可以与 V 成正比。
有任何想法吗?