找到两个顶点之间可能的最短路径

问题描述

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

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

enter image description here

解决方法

步骤 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 个顶点“运行”)。