【问题标题】:Find the possible shortest path between two vertices找到两个顶点之间可能的最短路径
【发布时间】:2021-05-25 16:38:54
【问题描述】:

假设我有一个这样的图,我一次只能访问 6 个顶点,例如,我第一次可以访问 123654,当我再次移动时,我需要从我访问的最后一个顶点开始上次所以对于给出的示例,我必须从 4 开始,然后我可以做 432567。目标是从 1 开始,并在我的最后一个元素的任何移动中结束于 7。

有什么方法可以实现吗?我已经被这个问题困住了好几个星期了,到目前为止,我的想法是继续探索我可能找到的所有可能的路线,但我认为这不是一个正确的算法,有更好的想法吗?

【问题讨论】:

  • Paint 的屏幕截图...?为什么? :)
  • 您是否总是需要准确地访问 6 个顶点?还是最多 6 个?
  • always 6 和截图只是给你一个例子哈哈

标签: java algorithm graph computer-science


【解决方案1】:

第 1 步。 找到从顶点 1 (V1) 开始的所有长度为 6 的路径。您可以为此使用 DFS:

123456
123654
125436
125634

我假设,您不能在同一个“运行”中访问同一个顶点两次。如果可以,您将获得更大的列表。

第 2 步。从 V7 中找出所有长度为 6 的路径:

765432
765234
763452
763254

第 3 步。从 V1 和 V7 中找到一个可以在一次运行中到达的顶点

它是顶点号 4。然后你可以构建两个运行,让你从 V1 到 V7:

123654
432567

第 4 步。您可以将此算法推广到任意图。

  1. 使用 DFS 或 BFS 构建从 V1 可访问的顶点列表。
  2. 对从 V1 到达的每个顶点重复此步骤,直到到达 V7(或 V[Last])。

您需要在长 DFS(每次运行后可到达的顶点)内运行一个短 DFS(6 个顶点“运行”)。

【讨论】:

  • 你能解释一下为什么它是 4 号吗?
  • @newToJava 从 1 开始的所有路径都以 4 和 6 结束。从 7 开始的路径以 2 和 4 结束。数字 4 是一个公共元素,可以从两端到达。
  • 所以如果从开始顶点到结束顶点没有公共元素,它只会递归地运行该方法直到有一个公共元素?
  • @newToJava 是的,这是一种方法。但是您实际上不必从两端移动。您可以从从一开始(从 V1,然后从 V2,然后从 V4)到达的每个顶点递归地运行该方法,直到您到达终点。我从两端都这样做只是为了使解释更简短。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多