我正在尝试开发一个旅行推销员类型的程序(在Java中),并试图找出某个部分的逻辑,这是一种用于计算一组节点(城市)之间最有效路线的蛮力方法,其中每个节点只接触一次。
我已经定义了一个带有 x/y 坐标的城市类,并有一个城市实例数组,以及一个用于绘制网格的网格类。城市在网格上可见,并在 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)
是Faculty(n)/2
(意思是:距离a-->b与b-->a不同)。它被称为排列
不要忘记 13! = 6227020800 和 Integer.max_value 以上,甚至 13!/2 更多!