Python Prim';s算法不';t生成正确的生成树 def prim(图形): que=队列。优先级队列() mst=[] 访问=设置() #使用元组生成边缘信息并将其推送到优先级队列 对于graph.keys()中的外部_键: 对于内部\u键,图[outer\u key]中的内部\u成本。项() que.put((内螺纹成本、外螺纹键、内螺纹键)) 当que.empty()为False时: edge=que.get() 成本,frm,至=边缘 如果要访问: 持续 已访问。添加(frm) 已访问。添加(到) mst.append(边缘) 对于下一个到,成本在图[to]中。项() 如果下一个\u未访问: que.put((成本、收件人、次收件人)) 返回mst
我正在用Python制作非常简单的Prim算法。在这段代码中,图形是用嵌套字典生成的。我将所有边(元组)推送到优先级队列,从中逐个获取它们,检查它是否是访问的顶点,并将相邻顶点推送到优先级队列 但是,最终生成树的形状如下所示:Python Prim';s算法不';t生成正确的生成树 def prim(图形): que=队列。优先级队列() mst=[] 访问=设置() #使用元组生成边缘信息并将其推送到优先级队列 对于graph.keys()中的外部_键: 对于内部\u键,图[outer\u key]中的内部\u成本。项() que.put((内螺纹成本、外螺纹键、内螺纹键)) 当que.empty()为False时: edge=que.get() 成本,frm,至=边缘 如果要访问: 持续 已访问。添加(frm) 已访问。添加(到) mst.append(边缘) 对于下一个到,成本在图[to]中。项() 如果下一个\u未访问: que.put((成本、收件人、次收件人)) 返回mst,python,Python,我正在用Python制作非常简单的Prim算法。在这段代码中,图形是用嵌套字典生成的。我将所有边(元组)推送到优先级队列,从中逐个获取它们,检查它是否是访问的顶点,并将相邻顶点推送到优先级队列 但是,最终生成树的形状如下所示: 2 [A] [B]-------[C] | 5 | | [D]--------[E] [F] 6 |
2
[A] [B]-------[C]
|
5 |
|
[D]--------[E] [F]
6 |
+---+
| 3
[G]----+
我想知道问题在哪里以及如何解决。谢谢。普里姆的算法从任意顶点开始。然后将其所有边添加到优先级队列并启动循环 您将all边添加到队列中(可能您与Kruskal混淆了,Kruskal做了其他事情) 因此,工作代码是:
def prim(graph):
que = queue.PriorityQueue()
mst = []
visited = set()
# Generate edge information with tuple and push it to Priority Queue
#for outer_key in graph.keys():
# for inner_key, inner_cost in graph[outer_key].items():
# que.put((inner_cost, outer_key, inner_key))
starting_vertex = list(graph.keys())[0]
for next_to, cost in graph[starting_vertex].items():
if next_to not in visited:
que.put((cost, starting_vertex, next_to))
while que.empty() is False:
edge = que.get()
cost, frm, to = edge
if to in visited:
continue
visited.add(frm)
visited.add(to)
mst.append(edge)
for next_to, cost in graph[to].items():
if next_to not in visited:
que.put((cost, to, next_to))
return mst