【发布时间】:2017-04-18 13:40:11
【问题描述】:
我需要在带循环的加权图中找到两个节点之间最便宜和最短的路径。我正在 Prolog 中实现它。
由于我必须找到 cheapest(最便宜)和 shortest(最短)路径,我想我应该使用以下方法计算所有现有的可能路径具有回溯的深度优先搜索,因为它的内存消耗低且相对较快(我使用辅助列表来跟踪访问过的节点以处理循环问题),然后从收集的路径列表中选择最便宜和最短路径。
我排除了使用启发式算法(例如 A*)的可能性,因为虽然速度更快,但它们依赖于估计函数,并且在估计可能错误的某些特定情况下,它们可能会给出错误的答案。我不想要好的解决方案,我想要最好的解决方案。
所以我的问题是:我对这个问题给出的方法是否有意义,更具体地说,是为了确保我在两个具有循环的节点之间的图形问题中获得最多/最少的东西(例如最便宜)的路径,确实计算所有现有解决方案然后通过与其他解决方案进行比较来选择正确的解决方案是有意义的,还是我以错误的方式解决这个问题?
【问题讨论】:
-
Seeing as A* 是基于 Dijkstra 的算法,但是使用启发式算法来加速它(你不想要),为什么不直接使用 Dijkstra 的算法呢?
-
@JosephYoung 老实说,我没有考虑过使用 Dijkstra。但这可能是更好的选择。不过,您认为收集所有解决方案然后从中挑选您想要的解决方案是不是很糟糕?
-
这里最便宜和最短是什么意思?边有权重吗?如果是,它们可以是负数吗?
-
@kraskevich 节点代表城市。城市之间有距离和旅行价格。一些城市只能通过某些交通工具到达,这意味着前往这些城市的费用比前往其他城市要贵。
-
这两个实际上是独立的问题吗?最短路径和最便宜路径可以完全不同吗?
标签: algorithm prolog shortest-path