Dijkstra - 在预算范围内查找目的地

时间:2017-11-15 15:44:19

标签: java graph-algorithm dijkstra

我得到了一个图形,包括一个起始顶点,其他顶点和边缘表示从一个顶点到另一个顶点的成本。我需要找到可以从起始顶点前往的目标顶点集。预算是一定数额的美元,旅行总费用应在预算范围内。我如何实现Dijkstra算法来解决这个问题?我想我们通常使用Dijkstra来找到之前两个固定顶点之间的最短路径。但我不确定如何在这个预算问题上实施Dijkstra。如果有人能提出一些想法,那确实有帮助!

2 个答案:

答案 0 :(得分:0)

令我不高兴的是,Dijkstra的算法解决了single-source shortest path问题。这意味着生成的数据结构是以起始节点为根的树。通常,实现将存储从起始节点到达每个节点的最小成本。总的来说,预算内可以达到的顶点集是最短路径的成本不超过预算的顶点集。算法本身不需要修改;在另一个步骤中,必须将返回的节点作为输出返回。

答案 1 :(得分:0)

如果您使用Dijkstra算法,您最终可能会遇到以下情况:

假设预算为50,并且有4个节点的图表(开始,节点1,节点2,节点3)

启动节点 - >节点1(15) - >节点2(10):因此总成本为25

启动节点 - >节点3(15):总成本为15

那么现在你的预期结果是什么?您应该转到节点1然后转到节点2并忽略节点3(因为您无法返回启动然后转到节点3,返回也将花费30)。或者你应该去节点1,回到开始,然后去节点3(总成本45,你可以利用的最大成本)

你需要的不是覆盖所有目的地的最短路径,即Floyd-Warshall算法https://en.wikipedia.org/wiki/Floyd - Warshall_algorithm