【问题标题】:BFS tree to graphBFS 树转图
【发布时间】:2020-09-28 17:10:24
【问题描述】:

假设我们为一个顶点为 {A,B,C,D,E,F,G,H} 的无向图获得以下以节点 D 为根的 BFS 树。 如何确定原始图中是否存在特定边?

这是一道选择题:

以下哪条边在原始图中不存在?

  1. (F,G)
  2. (乙,乙)
  3. (A,G)
  4. (E,H)

【问题讨论】:

标签: data-structures graph tree depth-first-search breadth-first-search


【解决方案1】:

你无法确切地知道图中哪些边在,但你可以确定一些是(即 BST 中的)和一些不是(否则 BST 会有看起来不同):

  1. BST 中的每条边也是图中的一条边
  2. 允许从根到某个节点的路径比 BST 中这两个节点之间的最短路径短的每条边都不是图的成员。

让我们看看以下边缘:

  1. (F,G)

如果这条边在图中,那么从 D 到 F 的最短路径将是 DGF,长度为 2,但在 BST 中,从 D 到 F 的路径长度为 3。这是不一致的,因为 BST 总是在图中找到根节点和任何其他节点之间的最短路径。

  1. (B,E)

这将允许从 D 到 E 的路径长度为 3,这与 BST 一致。所以这个可能是图中的一条边,但没有到。

  1. (A,G)

这将允许从 D 到 A 或从 D 到 G 的路径长度为 2,这与 BST 一致,因为 BST 在这两种情况下都提供更短的路径。所以这个可能是图中的一条边,但没有到。

  1. (E,H)

这将允许从 D 到 E 的路径长度为 3,这与 BST 一致。所以这个可能是图中的一条边,但没有到。

在这四个边中,只有 (F,G) 是明确的情况:该边不能在图中。

【讨论】:

  • @Anshul,对我的回答的任何反馈将不胜感激。
【解决方案2】:

BFS 树中的边是原始图中边的子集,并且多个原始图可能给出相同的 BFS 树,因此您的问题的答案是:

  • 如果 BFS 树有一条边 => 原始图也有这条边。
  • 如果 BFS 树没有边 => 原始图可能有也可能没有这条边。

    所以并不总是可以知道原始图是否有边。

将 MCQ 问题添加到原始问题后回答:
BFS 的工作方式是逐级处理的,这意味着在处理 level(i+1) 中的任何节点之前,将处理 level(i) 中的所有节点。
因此,在将 L4 中的任何节点添加到队列之前,应将 L3 中的所有节点添加到队列中,因此如果 (F,G) 在原始图中退出,则节点 F 应在 L3 中显示为节点 G 的子节点L4的...所以答案是边缘(F,G)。

【讨论】:

  • 这是一个 MCQ 类型的问题,它的选项是 1. (F, G) 2. (B, E) 3. (A, G) 4. (E, H)。以下哪条边在原始图中不存在
  • 我已经解释了为什么边 (F,G) 不能在原始图中,其他选择可以参考@trincot 的解释。
【解决方案3】:

节点的层级差不超过1,创建BFS树只是层级问题。

B 距离 E 仅一级。 E和H也是如此。 A和G在同一个级别,所以差为0。

F 和 G 相隔 2 层,因此它们可能不会出现在图中 - 如果它们之间的边存在,那么 BFS 树可能不会费力地遍历其他节点,这些节点当前位于第 3 层( C、B 和 H),在 F 之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多