【发布时间】:2015-10-30 10:07:24
【问题描述】:
我在网上找到了很多资源,讨论这个和相关主题,但我没有找到任何真正帮助我知道从哪里开始实施这个解决方案的东西。
澄清一下,从 0 城市开始,我需要每隔一个城市访问一次,然后返回 0 城市。
我有一个这样的数组:
0 1129 1417 1240 1951
1129 0 1100 800 2237
1417 1100 0 1890 3046
1240 800 1890 0 1558
1951 2237 3046 1558 0
除了找到最佳路线,我还需要找到沿途的最佳部分路线。例如,我将从长度为 2 的路线开始,并最终打印出如下内容:
S = {0,1}
C({0,1},1) = 1129
S = {0,2}
C({0,2},2) = 1417
S = {0,3}
C({0,3},3) = 1240
S = {0,4}
C({0,4},4) = 1951
然后我会转到长度为 3 的路线,并打印如下内容:
S = {0,1,2}
C({0,1,2},1) = 2517
C({0,1,2},2) = 2229
and so on...
为了使它成为一个动态编程解决方案,我假设我应该保存任何 n 个节点之间的最短距离,我认为最好的方法是使用 Hashmap,其中键是整数值该路径中包含的每个节点,按升序排列(从节点 0>1>3>4 或 0>1>4>3 开始的路径可以存储为 '134'),并且每个密钥将包含一个可以存储的对路径顺序为列表,总距离为整数。
此时我想我想计算距离 2 的所有路径,然后计算距离 3 的所有路径,然后取最小的几个并使用哈希图为每个路径找到最短的返回路径,然后进行比较。
这看起来可行吗?还是我完全走错了路?
【问题讨论】:
-
这是我在另一个线程上的解决方案:stackoverflow.com/a/47499540/2203569
标签: java algorithm dynamic-programming traveling-salesman