图论(十)最小生成树-Prim算法
来源:互联网 发布:考研英语二参考书知乎 编辑:程序博客网 时间:2024/05/20 19:49
前面说过,Prim算法是从顶点着手构建最小生成树的。应该说,Prim算法比Kruskal更简单。我们还是以前面的乡镇假设光纤网络为例:
Prim算法工作步骤
(1) 构建全部顶点集V,选取初始顶点,加入顶点集U。
构建顶点集V={a,b,c,d,e,f,g,h,i},从中选取任意一个顶点。我们假设从顶点a开始。将a加入到顶点集U={a}中。
(2) 找U中顶点与V-U中顶点的所有边。
U中顶点只有a,V-U={b,c,d,e,f,g,h,i},则U中顶点与V-U中顶点的所有边为a-b和a-f,图中紫色边。U中顶点为绿色背景顶点,V-U中顶点为黑色背景顶点。
(3) 选取所有边中的最短边加入最小生成树。
所有边a-b和a-f中的最短边a-b,将其加入最小生成树(图中绿色边)。
(4) 将最短边另一头的顶点,加入顶点集合U。
最短边a-b的另一头顶点为b,将b加入到U={a,b}。
(5) 继续找U中顶点与V-U中顶点的所有边。
此时,U={a,b},V-U={c,d,e,f,g,h,i},则U与V-U中顶点所有边为a-f, b-c, b-g,b-h。图中紫色边所示。
(6) 继续选取最短边,将最短边加入最小生成树,并将最短边另一头顶点加入U。
此时最短边为a-f,将最短边加入最小生成树,并将最短边顶点f加入U={a,b,f}。此时V-U={c,d,e,g,h,i}。
(7) 如此循环反复,直至U=V。
下面是按顺序的U和V-U以及最小生成树的变化过程:
U={a,b,f,g};V-U={c,d,e,h,i} U={a,b,f,g,h};V-U={c,d,e,i}
U={a,b,c,f,g,h};V-U={d,e,i} U={a,b,c,f,g,h,i};V-U={d,e}
U={a,b,c,e,f,g,h,i};V-U={d} U={a,b,c,d,e,f,g,h,i};V-U={}
为什么不会构成环
因为我们在寻找边时,只是找U与V-U中顶点所构成的边,而U中内部顶点的边是不会找的。找到最短边后,直接将另一头顶点加入U了,也就是说这两个顶点都在U中了,即使这2个顶点还有其他路径,后面都不会再找,也就不会构成回路了。
- 图论(十)最小生成树-Prim算法
- 最小生成树(prim算法)
- 最小生成树算法(prim&kruskal)
- 最小生成树(prim算法)--poj1258
- 最小生成树(Prim算法)
- HDU1863---最小生成树(prim算法)
- 最小生成树(Prim算法)
- 最小生成树(prim算法)
- 最小生成树(prim算法模板)
- 最小生成树prim算法(贪心)
- 数据结构--最小生成树(Prim算法)
- Prim算法(最小生成树)
- 数据结构:最小生成树(Prim算法)
- 最小生成树(hdu1233)Prim算法
- 最小生成树(Prim算法)
- 最小生成树(Prim算法)
- 最小生成树prim(普里姆)算法
- 最小生成树(Prim算法)
- spring.xml配置文件连接数据库
- codeforces——25A——IQ test
- 【2014年第五届蓝桥杯C/C++程序设计本科B组决赛 出栈次序(结果填空) 】
- 17.05.20 总结
- 总结9
- 图论(十)最小生成树-Prim算法
- 一个项目里面包含多个子项目jar包的配置实现
- Spring思维导图,让Spring不再难懂(ioc篇)
- Android Java层与Jni层的数组传递
- android studio 3.0 preview 解决Gradle: Configure Project or Gradle: Resolve Dependencies ':classpath
- 【Caffe】Caffe,CUDA,cuDNN安装指南,以及各种问题的解决方法(Ubuntu14.04)
- Hive学习 第五课 修改表名修改列名添加列并删除或替换列。
- Hbase整合hive
- 远程开机的原理与代码实现