路径问题的算法或方法,n点的最短路径为n <= 12

时间:2011-03-03 01:10:31

标签: c algorithm shortest-path traveling-salesman

我在2d平面上有n个点,n <= 12,我需要可用的最短路径的距离,包括所有点,从它们中的任何一个开始,但不是闭合电路

我一直在尝试floyd-marshal,旅行商问题和其他算法而没有成功。

我的老师认为这个问题很容易,所以我觉得它不需要arora近似值,但我不知道什么是最好的方法来解决这个问题,但也许是一些动态算法和类似

for i = 0 to n
    for j = 0 to n
    if path_distance(i,j) < mininum
        set minimum

任何帮助?

3 个答案:

答案 0 :(得分:1)

如果你知道你只有十二个点,并且想要找到一次访问每个节点的最短路径,那么你总是可以通过尝试所有可能的节点排列和计算长度来强制解决方案。沿着那个排列的路径。这根本不能很好地扩展,但如果你有一个固定的节点上限,那么它应该是合理的。

答案 1 :(得分:1)

当且仅当n <= 12时,我建议使用the Branch and Bound algorithm,这是强力算法的改进版本。

答案 2 :(得分:1)

我只提供提示,因为这是作业:

在分解这些问题时,递归非常有用。

您可以编写一个函数,该函数包含到目前为止的路径列表,到目前为止的最佳/最小距离以及未访问的节点列表。对于每个未访问的节点,它会尝试将其添加到路由到目前为止,如果该路由仍然比最佳/最小距离短,那么它将使用新路由和未访问节点列表调用自己。