106_Prime 最小生成树
来源:互联网 发布:丁丁长度知乎 编辑:程序博客网 时间:2024/05/19 15:25
最小生成树的Prime算法,用优先队列来实现。
《挑战程序竞赛》中, 使用一个min_cost数组来保存最小生成树倒每个结点的最短距离,每次操作对V进行循环;
对比了一下,以下程序,基于与最小生成树相连的边的优先队列,分析了一下不一定能占到便宜。
//// 106_Prime.cpp// changlle//// Created by user on 1/1/16.// Copyright (c) 2016 user. All rights reserved.//#include <iostream>#include <vector>#include <queue>using namespace std;int min_cost=0;struct edge { int cost; int to;};vector<edge> G[4];bool used[4];typedef pair<int,int> P;int V=4;int main() { edge e={1,1}; G[0].push_back(e); e={4,3}; G[0].push_back(e); e={2,2}; G[1].push_back(e); e={5,3}; G[1].push_back(e); e={1,0}; G[1].push_back(e); e={3,3}; G[2].push_back(e); e={2,1}; G[2].push_back(e); e={4,0}; G[3].push_back(e); e={3,2}; G[3].push_back(e); e={5,1}; G[3].push_back(e); priority_queue<P, vector<P>, greater<P>> que; for (int i=0; i<G[0].size();i++) { P e; e.first=G[0][i].cost; e.second=G[0][i].to; que.push(e); } int n=1; fill (used, used+V, false); used[0]=true; while (n<V) { P e=que.top(); que.pop(); min_cost=min_cost+e.first; n++; used[e.second]=true; int now=e.second; for (int j=0; j<G[now].size();j++) { if (!used[G[now][j].to]){ P e_1; e_1.first=G[now][j].cost; e_1.second=G[now][j].to; que.push(e_1); } } } cout<<min_cost<<endl; return 0;}
0 0
- 106_Prime 最小生成树
- 树结构_最小生成树_Prime算法
- poj_2031_已连接部分点的最小生成树_prime
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- HDU2199 Can you solve this equation?(二分)
- Maven学习系列--08一个HelloWorld的web应用
- java实现人民币大写
- 函数常识
- PyCharm的注册与使用
- 106_Prime 最小生成树
- 积分墙、广告等违规应用如何在安卓市场上线
- (4)java的数据类型
- DrTM durability
- 有关内部类
- Windows Media Player进度条无法自动播放的解决方法
- uva 10004 Bicoloring 二染色
- HDU2899 Strange fuction(二分)
- cocoapods的安装与使用