最小生成树模板

来源:互联网 发布:php大马源码 编辑:程序博客网 时间:2024/05/15 23:52

Kruskal算法(优先队列版本)

#include <queue>using namespace std;struct Edge{int u,v,w;//u和v分别是边的端点,w是该边的权值friend bool operator<(Edge a,Edge b){//运算符重载,使用最小优先队列return a.w>b.w;}}Edges[MAXM];//存放边的相关信息,边数上限为MAXM,不使用0号单元int Kruskal(){int i,ru,rv,ans;Edge t;priority_queue<Edge> q;init(n);//n是点的个数,并查集初始化for(i=1;i<=m;i++)//m条边入队q.push(Edges[i]);ans=0;while(!q.empty()){t=q.top();q.pop();ru=find(t.u),rv=find(t.v);//并查集查找if(ru!=rv){merge(ru,rv);//并查集合并ans+=t.w;}}return ans;}



原创粉丝点击