我正在尝试开发一个旅行推销员类型的程序(用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/