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

时间:2016-06-06 13:14:52

标签: java path grid nodes traveling-salesman


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

我已经使用x / y co-ords定义了一个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
  • 等。

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

1 个答案:

答案 0 :(得分:1)

Faculty(n)/2如果你的距离是无向的,或Faculty(n)如果你的连接是指向的(意思是:距离a - > b不同于b - > a)。它被称为Permutation

不要忘记13! = 6227020800和超过Integer.max_value,甚至13! / 2更多!