Prim算法思路:一开始,选择一个起始点为最初的解集合,并把起始点能到达的所有目标点作为参考点。在参考点中选择一个距离最短的点,把该目标点加入集合,忽略后续能到达该点的所有路径。再把集合中新加入的点的所有可到达点加入到参考点中,重复选择最短距离点并把该点加入集合。
Prim算法与Dijkstra算法原理类似,但不同的是Prim中比较的点距离为点到解集的距离,而Dijkstra中的距离是该点到源节点1的距离
时间复杂度:
一般Prim O(n^2)
堆优化版 O(mlogm)
一般写法代码模版:
朴素Prim
dist[i] <-- 正无穷大
for( int i=0 ; i<n ; i++){
t <-- 找到集合外距离最近的点
用 t 更新其他点到集合的距离
st[t] = true
}
一般Prim例题及题解:Prim算法求最小生成树(一般写法)
堆优化思路:
利用优先队列的小顶堆来查找最小距离,在遇到已加入最小生成树的点使用continue跳过
写法可借鉴Prim算法求最小生成树(堆优化写法)
3万+

被折叠的 条评论
为什么被折叠?



