【发布时间】:2012-08-03 20:12:07
【问题描述】:
我知道这个特定问题的答案是 O(V + E),对于像树这样的图形,这是有道理的,因为每个顶点只被探索一次。
但是假设图中有一个循环。
例如,让我们使用一个有四个顶点 A-B-C-D 的无向图。
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 成正比。
有什么想法吗?
【问题讨论】:
-
我在你的图中没有看到 D->C,所以它应该从 D 开始回溯。所以遍历应该是 A->B->D,A->C。跨度>
-
@Ayos 这是一个无向图,所以因为 C->D 在那里 D->C 也在那里,抱歉表示不正确
标签: algorithm data-structures time-complexity depth-first-search