找到通过图中所有点的最短路径的算法

时间:2013-08-21 08:34:29

标签: algorithm

我有一个NxN表,让我们说5次5,其中给定A点在随机位置和未知数量的B点:

+---+---+---+---+---+
| B |   |   |   |   |
+---+---+---+---+---+
|   | A |   |   | B |
+---+---+---+---+---+
|   |   | B |   |   |
+---+---+---+---+---+
|   |   |   | B |   |
+---+---+---+---+---+
| B |   |   | B |   |
+---+---+---+---+---+

从A点开始,有没有办法找到通过所有B点的最短路径?

同样的问题被问到here我已经做过几个关于旅行商问题的研究。但是,图表和桌面上的解决方案的方法是不同的,因为我无法确定2个插槽之间的长度,并且在这个类似于图表的图表上,A只能向上/向下/向左/向右移动。此外,wiki没有细分算法如何工作或如何将其转换为编程而不是数学运算。我被困住了,不知道现在要去哪里。任何建议都很高兴。请给我一些解决方案。

编辑: Adrian Wragg建议我画线作为距离,所以1个问题就完成了。我不确定如何将问题解决到确切的步骤,因为我找到的所有资源(即使在我的语言中)都是关于数学符号的理论。我的知识太远了。

3 个答案:

答案 0 :(得分:3)

您可以通过查找所有对之间的最短距离来使其成为旅行商问题。由于你只能上,下,左,右,任意K和L节点之间的距离为Math.abs(L.y-K.y) + Math.abs(L.x-K.x),其中x和y是它们的坐标。

答案 1 :(得分:1)

  

有什么办法

是的,当然。例如,保证蛮力解决方案能够在适当的时候为您提供最佳解决方案。

如果您正在寻找一种有效的算法(在多项式时间内运行),您可能会感到失望,因为这个问题可以减少到旅行商和NP类。如果你设法在多项式时间内解决这个问题,我相信对于1.000.000美元或类似的东西有现金奖励。

请参阅: http://en.wikipedia.org/wiki/Reduction_(complexity)

http://en.wikipedia.org/wiki/NP_(complexity)

答案 2 :(得分:1)

您可以尝试使用不同距离函数的travelsalesman算法,例如曼哈顿距离。