最小生成树prim模板
来源:互联网 发布:gs与js防水涂料的区别 编辑:程序博客网 时间:2024/06/05 06:45
1.模板一
此段模板取自<挑战程序设计竞赛>p106-107
//int cost[INF][INF];//边//int used[INF];//int mincost[INF];//X到节点v的最小值//int v;int prim(){ for (int i = 0; i < V; i += 1){ mincost[i] = INF; used[i] = false; } mincost[0] = 0; int res = 0; while (1){ int v = -1; //从不属于X的顶点中找到从X到其权值最小的顶点 for (int i = 0; i < V; i += 1){ if(!used[i] && (v == -1 || mincost[i] < mincost[v])) v = i; } if(v == -1) break; used[v] = true; res += mincost[v]; //在此顶点基础上对X到其他顶点的最小值进行更新 for (int i = 0; i < V; i += 1){ mincost[j] = min(mincost[j],cost[v][j]); } } return res;}
2.模板二
对以上模板进行优化,利用堆存储每个节点,复杂度可以达到O(ElogV)
//int V;//int ans;//int mincost[MAXN];//int used[MAXN];//struct edge{ //int to,cost;//edge (){}//edge (int to,int cost):to(to),cost(cost){}//};//vector <edge> G[MAXN];//存放从i出发的边//typedef pair<int,int> P;//first存放距离,second存放节点//priority_queue<P,vector<P>,greater<P>> que;void prim(){//初始化 memset(used,0,sizeof(used)); fill(mincost,mincost+V,INF); ans = 0; que.push(P(0,0)); while (!que.empty()){ //取最短边 P p = que.top(); que.pop(); int d = p.first,v = p.second; if (used[v]) continue; used[v] = 1; ans += d; //以最短边的节点为基础,更新最短距离 for (int i = 0; i < G[v].size(); i += 1){ edge e = G [v][i]; if ((mincost[e.to] > e.cost) && !used[i]){ mincost[e.to] = e.cost; que.push(P(mincost[e.to],e.to)); } } } printf("%d\n",ans);}
阅读全文
0 0
- 最小生成树Prim模板
- prim最小生成树模板
- 最小生成树Prim模板
- 模板--最小生成树【prim】
- 最小生成树-prim 模板
- 最小生成树prim模板
- 最小生成树(Prim模板)
- 最小生成树Prim算法模板
- 最小生成树-prim算法模板
- hdu1233最小生成树 prim算法模板
- 最小生成树(prim算法模板)
- prim算法模板—最小生成树
- 最小生成树(prim&kruskal)模板
- 最小生成树(Prim模板题)
- prim算法模板 (最小生成树)
- 最小生成树prim+kruskal模板
- 最小生成树-Prim算法(模板)
- 最小生成树模板(Kruskal和prim)
- ORM的概念, ORM到底是什么
- python--leetcode442. Find All Duplicates in an Array
- 蚂蚁问题变形
- 查找算法
- 1066. 图像过滤(15)
- 最小生成树prim模板
- HDU 1171 Big Event in HDU (多重背包,可转换为01背包)+对于背包的一点认识
- Online Judge 榜单清空操作
- TCP协议怎样进行流量控制,并且怎么保证传输的可靠性
- 关于区块链的一点概述
- Spring 框架的七个模块
- centos 6.8 + pgsql 9.6 + mysql_fdw
- JavaScript——弹窗(基础)
- UVa 10529 Dumb Bones 期望DP