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。有人可以告诉我,我哪里出错了,并使用相同的实现更正代码。
归档时间: |
|
查看次数: |
46 次 |
最近记录: |