假设我有一个有向图G(V,E,w,c),其中w是每条边的正权重,c是每条边的成本为1或0.我需要找到一种算法对于给定的源顶点,u查找从u到V中每个成本≤k(其中k≥1)的顶点的最短路径。
我尝试修改Bellman ford的算法,但似乎找不到解决方法。
答案 0 :(得分:1)
让我重申对问题的理解。
对于成本不超过k
的所有顶点,您需要从顶点u
到达的最小权重路径。
您需要综合考虑才能实现目标。
假定RouteToNode
对象具有以下属性:cost
,weight
,node
,lastRouteToNode
和自动递增的id
。这是一个链接列表,可将我们带回到原始节点,从而使我们可以重新构造路径。我们先按cost
,然后按weight
,然后按id
比较它们。
我们有一个哈希/字典/无论您要调用什么,它都能将节点映射到到达该节点的权重最低的RouteToNode
对象。称为bestRoute
。
我们有一个todo
列表,其中有RouteToNode
个尚未处理的列表,它是一个优先级队列,总是返回最小的RouteToNode
。请注意,它总是将它们从最低成本返回到最高成本。
我们从bestRoute
开始,其中没有任何内容,而一个todo
队列只有一个RouteToNode
,即:
{
id: 0,
cost: 0,
weight: 0,
node: u,
lastRouteToNode: null
}
现在我们执行以下伪代码:
while todo is not empty:
thisRouteToNode = todo.pop()
if thisRouteToNode.node not in bestRoute or
thisRouteToNode.weight < bestRoute[thisRouteToNode.node].weight:
bestRoute[thisRouteToNode.node] = thisRouteToNode
for edge adjacent to thisRouteToNode.node:
construct nextRouteToNode by adding edge
if nextRouteToNode.cost <= k:
todo.push(nextRouteToNode)