我需要在带有周期的加权图中找到两个节点之间最便宜和最短的路径。我正在Prolog中实现这个。
由于我必须找到最便宜(最便宜)和最短(最短)路径,我想我应该通过使用来计算所有现有的可能路径深度优先搜索与回溯,因为它的内存消耗低并且相对较快(我使用辅助列表来跟踪访问的节点以处理周期问题),然后从收集的路径列表中选择最便宜的和最短路径。
我排除了使用具有启发式算法的算法(例如A *),因为虽然速度更快,但它们依赖于估计函数,并且它们可能在估计可能错误的某些特定情况下给出错误的答案。我不想要一个好的解决方案,我想要最好的解决方案。
所以我的问题是:我给这个问题的方法是否有意义,更确切地说,确保我在两个节点之间的图形问题中得到最多/最少的东西(例如最便宜的)路径,是吗?计算所有现有的解决方案然后通过与其他解决方案进行比较来选择正确的解决方案是有意义的还是我以错误的方式处理这个问题?
答案 0 :(得分:2)
此处无需使用自定义算法。您可以使用标准的最短路径查找算法(如果所有权重都是非负的,则为Dijkstra,否则为Ford-Bellman或Floyd。)。边缘的权重应分别是成本和第一个和第二个问题的距离。