Prim 算法
假设所求图是连通的,求它的最小连通图。
- 设集合S为已确定的局部最小连通图,初始时S={a},a为任意一点;
- 找出与S中连接着的权值最小的点t,将它加入集合S中;
重复步骤 2 直至所有点均连通。
Prim 算法跟单源最短路径算法 Dijkstra 很像,唯一不同的是在更新dist时,单源最短路径的做法是dist[v] = min(dist[v], dist[u] + cost[u][v])
而 Prim 的做法是dist[v] = min(dist[v], cost[u][v])
hdu1233AC code
1 | import java.io.*; |
Kruskal 算法
将 Edge<cost, from, to> 以 cost 按从小到大排序,设集合S={}为连通子集,直到所有点均连通为止。
边少的时候 Kruskal 效果好,点少的时候 Prim 效果好,此题 Prim 用时更少。
1 | import java.io.*; |