天天看点

Prim算法(并查集)

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索​​最小生成树​​。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小

 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作:

   在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。

图例 说明 不可选 可选 已选(Vnew)
​​
Prim算法(并查集)
​​
此为原始的加权连通图。每条边一侧的数字代表其权值。 - - -
​​
Prim算法(并查集)
​​
顶点D被任意选为起始点。顶点A、B、E和F通过单条边与D相连。A是距离D最近的顶点,因此将A及对应边AD以高亮表示。 C, G A, B, E, F D
​​
Prim算法(并查集)
​​
下一个顶点为距离D或A最近的顶点。B距D为9,距A为7,E为15,F为6。因此,F距D或A最近,因此将顶点F与相应边DF以高亮表示。 C, G B, E, F A, D
​​
Prim算法(并查集)
​​
算法继续重复上面的步骤。距离A为7的顶点B被高亮表示。 C B, E, G A, D, F
​​
Prim算法(并查集)
​​
在当前情况下,可以在 C、 E与 G间进行选择。 C距 B为8, E距 B为7, G距 F为11。点 E最近,因此将顶点 E与相应边 BE高亮表示。 C, E, G A, D, F, B
​​
Prim算法(并查集)
​​
这里,可供选择的顶点只有C和G。C距E为5,G距E为9,故选取C,并与边EC一同高亮表示。 C, G A, D, F, B, E
​​
Prim算法(并查集)
​​
顶点G是唯一剩下的顶点,它距F为11,距E为9,E最近,故高亮表示G及相应边EG。 G A, D, F, B, E, C
​​
Prim算法(并查集)
​​
现在,所有顶点均已被选取,图中绿色部分即为连通图的最小生成树。在此例中,最小生成树的权值之和为39。