首页 > 代码库 > 最小生成树 prime+heap
最小生成树 prime+heap
改一个错误真不容易,刚开始没有加上used数组,没有判断每个顶点是否已经加入到数组当中,结果同一个顶点被pop不止一次。
struct edge{int to,cost;}; typedef pair<int,int> P;//first集合X到i的最短距离,second点的编号 int ranchNumber,roadNumber;//顶点个数,道路个数 int mincost[10005];//每个顶点到集合x的最短距离 bool used[10005];//每个顶点是否已经加入到集合中 vector<edge> g[100005]; //顶点编号从0开始; int heapPrime(){ priority_queue<P,vector<P>,greater<P> > que; fill(mincost,mincost+10005,INF); fill(used,used+10005,false); mincost[0]=0; int ans=0; que.push(P(mincost[0],0)); for(int j=0;j<ranchNumber;j++){ P p=que.top(); while(used[p.second]==true){ que.pop(); p=que.top(); } que.pop(); used[p.second]=true; ans+=p.first; int e=p.second; for(int i=0;i<g[e].size();i++){ edge ee=g[e][i]; if(mincost[ee.to]>ee.cost){ mincost[ee.to]=ee.cost; que.push(P(mincost[ee.to],ee.to)); } } } return ans; }
最小生成树 prime+heap
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。