ccf 201703 4-地铁修建(100分)

最小生成树算法实现
本文介绍了一种使用优先队列实现最小生成树(MST)的算法,并通过C++代码展示了如何处理图数据结构来找到连接所有节点的最低成本边集合。该算法适用于解决网络设计等问题。
#include<iostream>
using namespace std;
#define Max 1000100
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int p[Max];


struct node{
   int x,y,z;
 //  node (int xx,int yy,int zz):x(xx),y(yy),z(zz){}
   friend bool operator<(node n2,node n3){return n2.z>n3.z;}
} n1;




int find(int x){
if(p[x]==x)
return x;
else {
int y=find(p[x]);
p[x]=y;
return y;
}
}


void merge(int x,int y){
p[find(x)]=find(y);
}










int main (){
    int n,m,z;
cin>>n>>m;
priority_queue<node>open;
// prority_queue<node>closed;
for(int i=0;i<m;i++)
{ cin>>n1.x>>n1.y>>n1.z;
 open.push(n1);
}


    for(int i=1;i<=m;i++)
    { p[i]=i;}




   for(int i=0;i<m;i++){
    node s=open.top();
    merge(s.x,s.y);
    open.pop();
     
     
    if(find(1)==find(n)){
    z=s.z;
    break;
   }
}
    cout<<z;
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值