prim算法基本思想:
对 图G( V , E) 设置 集合S来存储已被访问的结点,然后执行N次以下操作(N为结点个数)
- 每次从集合V-S(即未访问结点) 中选择与 集合S(已访问结点的集合) 最近的一个结点u,访问u并将其加入集合S,同时把 这条离集合S最近的边(u - S)d[u] 加入最小生成树中。
- 以结点u作为接口(踏板),优化从u能到达的未访问结点v与集合S的最短距离。
伪代码:
//G为图;数组d为结点与集合S的最短距离(初始化为INF)
Prim()
{
初始化;
for(循环 N 次)
{
u = d[u] 最小的还未访问的结点的编号;
记 u 已被访问;
for(从 u 出发能到达的所有顶点 v )
{
if( v 未被访问 && 以 u 为中介点使得 v 与集合 S 的最短距离 d[u] 更优)
{
将 G[u