寻找访问所有节点的廉价路径

时间:2013-07-18 15:01:23

标签: java a-star

我目前正在经历旧的编程奥林匹克问题,并发现问题5相当困难。该问题基于某种类型的图论,涉及计算最便宜的路径和访问所有节点。有关详细信息,请访问:problem

使用A *搜索算法是否合适?您将使用什么样的算法来解决问题,这个算法可以快速实施并且可以在给定的时间段内解决问题?

2 个答案:

答案 0 :(得分:1)

正如@kiheru所说,A *不起作用。

这是旅行商问题,这是NP完全问题。替换行驶距离的通行费,你会遇到同样的问题。旅行推销员链接有几种这样的算法。

Traveling Salesman

根据城市的数量,您会发现不同的算法,但是当您将城市添加到计算机不是精确解决方案的最佳选择时,它会在计算上花费更多。获得近似有许多不同的技术,但它不是一个可解决的问题。

如果我要编码,我会使用一种名为Linguistic Geometry的东西(我在研究生院学到的东西)。基本上,您将节点视为游戏板,您可以一步一步地找到您想要的答案并进行评估。这不会解决它,但它会在很短的时间内给你一个很好的近似值。

答案 1 :(得分:0)

这称为travelling salesman problem,是NP-Complete。这意味着解决这个问题的方法通常不比强制执行(实际上有O(2^n*n^2)解决方案based on dynamic programming。因为你只处理6个节点,即6个节点! = 720总可能检查的路径,最简单的解决方案是尝试每个不同的城市排序和记录哪个最快。

(另外,与@ kiheru上面的评论相反,A *不是启发式的。使用启发式算法,但仍能找到最短路径问题的精确解决方案。但是,无论哪种方式都不适用于您的问题)