您的位置:首页 > 其它

最小生成树:使用堆和并查集的kruskal算法

2008-10-31 13:55 323 查看
头文件:

struct Edge

{

double dis;

int v,w;

bool operator<(const Edge &e1)const

{

return dis<e1.dis;

}

bool operator>(const Edge &e1)const

{

return dis>e1.dis;

}

Edge(int vv,int ww,double diss)

{

v=vv;

w=ww;

dis=diss;

}

};

priority_queue<Edge,vector<Edge>,greater<Edge>> e;//边集

priority_queue<Edge,vector<Edge>,less<Edge>> te;//生成树的边集

int p;//顶点数

UFset u(p+1);

int k=0;

while(e.size()&&k<p-1)

{

Edge x=e.top();

e.pop();

int a=u.Find(x.w);

int b=u.Find(x.v);

if (a!=b)

{

te.push(x);

u.Union(a,b);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: