prim算法
来源:互联网 发布:鼎锐软件科技有限公司 编辑:程序博客网 时间:2024/05/16 19:53
最小生成树:在一个具有几个顶点的连通图G中,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,代价最小生成树则称为最小生成树。
•算法过程
–从单一顶点的树T开始
–不断加入耗费最小的边(u, v),使T∪{(u, v)}仍为树 ——u、v中有一个已经在T中,另一个不在T中
//prim算法求最小生成树#include <iostream>#include<cstdio>#include<cstring>#define MAX 22#define VALUE 0xfffffusing namespace std;int g[MAX][MAX];int minCost[MAX];//表示被加到最小生成树的点的集合bool used[MAX];int v,e;void createGraph(){ int start,end,weight; scanf("%d%d",&v,&e); //从1开始 memset(g,0,sizeof(g)); for(int i=0;i<e;i++) { scanf("%d%d%d",&start,&end,&weight); g[start][end]=weight; g[end][start]=g[start][end]; }}//返回最小生成树的总大小int prim(){ for(int i=0;i<=v;i++) { minCost[i]=VALUE; used[i]=false; } minCost[1]=0; int res=0;int u; while(true) { int t=-1; for(u=1;u<=v;u++) { if(!used[u] && (t==-1 || (minCost[t]>minCost[u] && minCost[u]!=0))) t=u; } if(t==-1) break; used[t]=true; res+=minCost[t]; printf("%d\t",minCost[t]); for(u=1;u<=v;u++) { if(minCost[u]>g[t][u] && g[t][u]!=0) minCost[u]=g[t][u]; } } return res;}int main(){ createGraph(); int path=prim(); printf("%d\n",path); return 0;}
- prim 算法
- Prim算法
- Prim算法
- prim算法
- Prim算法
- Prim算法。
- Prim 算法
- Prim算法
- prim算法
- Prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- Android Activity总结
- 解决Android横竖屏切换数据丢失问题
- 字符串截取小技巧
- DataSet 写入方式测试中
- 在.net开发中使用Log4Net组件
- prim算法
- Zookeeper之Zab协议介绍(一)
- 弹出层
- Handler初探
- 使用Google Maps API 在地图上添加线和删除线
- 适用于定义的操纵符进行输入输出格式控制
- webphere简单集群环境搭建(仅两台机器)
- WPA 和 WPA-PSK的区别
- android webview用法小结2 java与javascript的交互