java - 计算所有节点仅被触及一次的节点之间的所有可能路线? (旅行推销员)

标签 java path grid nodes traveling-salesman


我正在尝试开发一个旅行推销员类型的程序(用Java),并试图找出某个部分的逻辑,这是一种强力方法,用于计算一组节点(城市)之间的最有效路线,其中每个节点节点仅被触摸一次。

我使用 x/y 坐标定义了一个 City 类,并有一个 City 实例数组,以及一个用于绘制网格的网格类。 城市在网格上可见,并且在城市数组中的索引编号为 0-i
(在示例网格中定义了 4 个城市):

· · · · · · · · · · · · · · · ·
· · · · · · · · · 1 · · · · · ·
· · 0 · · · · · · · · · · · · ·
· · · · · · · · · · · 3 · · · ·
· · · · · · 2 · · · · · · · · ·
· · · · · · · · · · · · · · · ·
· · · · · · · · · · · · · · · ·

已经有很多路线可见(我相信 4!= 24):

  • 0-1-2-3
  • 0-2-1-3
  • 2-0-1-3
  • 2-3-1-0
  • 等等..

是否有一种简单的迭代/递归方法来获取每条可能的路径,给定一系列城市及其坐标,我可以用它来确定距离并列出最有效的路线?

最佳答案

如果您的距离是无向的,则为 Faculty(n)/2 ;如果您的连接是有向的,则为 Faculty(n) (意思是:距离 a-->b 不同于b-->a)。它的名字叫Permutation

别忘了13! = 6227020800并且超过了 Integer.max_value,甚至是 13!/2 更多!

关于java - 计算所有节点仅被触及一次的节点之间的所有可能路线? (旅行推销员),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37658482/

相关文章:

path - 为什么使用 $PATH 以及它是什么

android - Ubuntu中的Android可执行快照路径在哪里?

path - launchd plist 中的相对路径

javascript - Kendo Grid C# - 再次选择当前页面而不刷新数据源

grid - 如何使用 Twitter Bootstraps 网格系统在两列之间添加一条线

java - 在 Android 中读取 JSON 文件并出现 API 问题

java - Log4J SocketAppender 吞下来自远程客户端的调试信息

java - Spring Boot 使用 REST 变量绑定(bind)

html - 具有填充图像问题的响应式网格

java - SQL 查询可以在 SQL Developer 中运行,但不能在 Java 端运行