我之前参加了一个考试,有一个问题让我和其他与我交谈的人感到困惑。它问了以下问题:
举例说明未加权的图 G 和两个顶点 s 和 f ,以便 s之间存在最短路径和 f 广度优先搜索(从 s 开始)将从不查找,无论它访问相邻顶点的顺序如何到了特定的边缘。
对我们来说,这似乎是不可能的。我的第一个想法是,如果最短路径包含一个顶点作为其 n 步骤,可以在 m 步骤中从 s 到达,其中< em> m &lt; n ,然后BFS永远不会找到该路径,因为顶点已经被标记为已访问。但如果是这种情况,那么所述路径根本不是最短路径,因为在 m 步骤中到达顶点然后继续正常会获得更短的路径。
我们的教授是否提出了一个不可能的问题(也许是一个错字),或者我错过了什么?
编辑:为了消除任何可能的歧义,问题并未要求举例说明BFS无法找到从 s 到 f的最短路径。相反,它要求提供一个示例,其中存在从 s 到 f 的某些最短路径,BFS将永远找不到。因此,除非我误解了这些术语的含义,否则BFS完全和最优的事实并不排除这种可能性。
编辑2:也可以假设我们正在使用的BFS算法不会两次处理同一节点。例如,请参阅BFS Wiki上的算法大纲。
答案 0 :(得分:7)
让G = (V,E)
图表
V = ℕ ∪ {-1, 0}
和E = { {-1,t}, {t,0} | t ∈ ℕ }
并让s = -1
和f = 0
。从s
到f
存在无限长度为2的路径,但由于s
具有无限数量的邻居,因此BFS永远不会到f
。
不存在有限图,因此BFS找不到从s
到f
的最短路径。可以说G
是一个有限图,s = a₀ → a₁ → ... → an → an+1 = f
是从s
到f
的最短路径。然后存在BFS的执行顺序,如下所示:
对于从
i
到0
的所有n
,首先访问ai+1
,然后访问ai
的所有其他直接邻居。
由于G
是有限图,因此每个节点ai
也只存在有限的许多直接邻居。因此它将完成列表并进入路径上的下一个节点。由于路径是最短路径,因此它是第一个连接s
和f
的路径。因此,不存在有限图,使得BFS找不到从s
到f
的最短路径。
从s
到f
的路径短于2,也可能没有示例。
如果s
和f
被认为不是同一节点,则可以想到的最短路径长度为1。但这意味着f
是s
的直接邻居,因此存在一个首先访问f
的BFS,然后继续访问无数其他邻居。
答案 1 :(得分:1)
我认为@hexaflexagonal可能错误地指出了问题。
在CLRS中应该是一个问题:
问题和解决方案:
由于BFS的性质,BFS不会产生某些E _ {\ pi}集。具有多个最短路径解的循环图就是这种情况。