首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向Dijkstra算法

反向Dijkstra算法
EN

Stack Overflow用户
提问于 2020-04-21 06:01:09
回答 1查看 346关注 0票数 0

我已经开始在python中向后实现Dijkstra的算法:

代码语言:javascript
复制
def backwardsDijkstra(g: DoubleDictGraph, s, t):
    q = PriorityQueue()
    dist = {}
    next = {}
    q.add(t, 0)
    dist[t] = 0
    found = False
    while not q.isEmpty() and not found:
        x = q.pop()
        for y in g.parseNin(x):
            if y not in dist.keys() or dist[x] + g.Cost(x, y) < dist[y]:
                dist[y] = dist[x] + g.Cost(x, y)
                q.add(y, dist[y])
                next[y] = x
        if x == t:
            found = True
    return dist[s], next

我不明白为什么它会在下一张图的第二次迭代中停止,例如:

代码语言:javascript
复制
5 7
0 1 5
0 2 20
1 2 10
1 3 30
2 3 5
2 4 20
3 4 10
(number of vertices, number of edges, (start,end,cost)
EN

回答 1

Stack Overflow用户

发布于 2020-06-30 17:46:27

代码中的bug在下面这一行:

代码语言:javascript
复制
        if x == t:
            found = True

因为您是从t (目标)开始的,所以您应该查找s (源)。目前,您正在跳出第一个候选者(即t)的循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61332753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档