简介:Prim算法是一种用于求解最小生成树问题的经典算法。本文将介绍Prim算法的基本原理、实现步骤以及优化方法,并通过实例演示如何使用Prim算法找到一个图的最小生成树。
Prim算法是一种求解最小生成树问题的经典算法,它的基本思想是从一个顶点开始,逐渐加入其他顶点,每次加入一个顶点时,选择距离当前生成树最近的顶点加入,直到所有顶点都加入生成树中。
以下是Prim算法的步骤:
在上面的代码中,我们使用了一个优先队列来存储未选集合N中的边,每次选择权重最小的边加入已选集合A中。同时,我们还需要在每次加入一个顶点后,将与该顶点相连的所有边加入优先队列中,以便后续选择。
import heapqdef prim(graph, start):mst = [] # 最小生成树的边visited = set([start]) # 已选集合Aedges = [ # 未选集合N中的边,按权重从小到大排序(cost, start, to)for to, cost in graph[start].items()]heapq.heapify(edges)while edges:cost, frm, to = heapq.heappop(edges)if to not in visited:visited.add(to)mst.append((frm, to, cost))for to_next, cost2 in graph[to].items():if to_next not in visited:heapq.heappush(edges, (cost2, to, to_next))return mst