使用 Dijkstra 查找从起始节点到其他节点的最短路径

Sto*_*old 5 graph dijkstra breadth-first-search shortest-path python-3.x

这是来自hackerrank的问题。我一直在做一些基本的图形问题。这是一个在所有边上权重相等无向图。我必须打印重量才能从起始节点到达每个节点。如果它无法到达,我不得不返回-1。我不应该在答案列表中包含源节点的成本

这是我的解决方案

def bfs(n, m, edges, s):
    adjList = defaultdict(list)

    for u , v in edges:
        adjList[u].append((v , 6))
        adjList[v].append((u , 6))

    queue = []
    heapq.heappush(queue , (0,0,s))
    visited = set()
    visited.add(s)
    result = [-1] + [-1 for i in range(n)]

    while queue:
        costSoFar , travelled , nextNode = heapq.heappop(queue)
        result[nextNode] = costSoFar

        if travelled == m:
            break

        for neighbourNode , neighbourCost in adjList[nextNode]:
            if neighbourNode not in visited:
                heapq.heappush(queue , (costSoFar + 6 , travelled + 1 , neighbourNode))
                visited.add(neighbourNode) 
                   
    answer = result[ : s - 1] + result[s + 1 :]
    return answer
Run Code Online (Sandbox Code Playgroud)

我知道Dijkstra在这里有点矫枉过正,我们可以使用简单的 BFS 来解决它。但我想练习这个。这就是我尝试实施 Dijkstra 的原因。

问题是,我能够通过示例案例,但它给了我其他案例的TLE 和 WA。有人可以告诉我,我哪里出错了,并使用相同的实现更正代码。