计算节点之间所有可能的路由,其中所有节点仅接触一次?(旅行推销员)




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

最新更新