Prime构造最小生成树
1. 问题
在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。
2. 解析
3. 设计
int Prime()
{
vis[1] = 1; //将顶点1标记为已连通
for( i from 2 to N){
vis[i] = 0; //其他顶点标记为未连通
dis[i] = mp[i][1]; //将点i与顶点1的权值赋值给dis[i]
}
for( i from 1 to N-1){
for(j from 1 to N){
找到最小权值边且端点未连通,记下pos;
}
vis[pos] = 1;//将该点标记为已连通;
sum+=dis[pos];//累加权值
for(遍历所有点){
if(!vis[j] && dis[j]> mp[pos][j] && mp[pos][j] != inf){
//如果该店未连通且与pos位置更近
则更新dis
dis[j] = mp[pos][j];
}
}
}
}
4. 源码
源码地址: https://github.com/Bacsonlx/Algorithm-analysis