微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决找到两个顶点之间可能的最短路径

假设我有一个这样的图,我一次只能访问 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 个顶点“运行”)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。