首页 > 代码库 > 最小生成树
最小生成树
//最小生成树 用了贪心的思想每次选符合条件的最短边直到边取完 或 所有点之间已可互达。
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<cmath>using namespace std;const int MAXN = 1000;struct edge{ int u,e,v;}e[MAXN*100];bool cmp(edge a,edge b){ return a.v<b.v;}int f[MAXN*MAXN];int find(int x){ if(f[x]==x)return f[x]; else return f[x]=find(f[x]);}int main(){ int n,m,ans=0; while(scanf("%d",&n)!=EOF && n!=0 ) { ans=0; int m=(n-1)*n/2; for(int i=1;i<=m;i++){ int x,y,z;scanf("%d%d%d",&x,&y,&z); e[i].u=x;e[i].e=y;e[i].v=z; } for(int i=1;i<=n;i++) f[i]=i; sort(e+1,e+m+1,cmp); int road=n-1; for(int i=1;i<=m;i++) { int x=find(e[i].u); int y=find(e[i].e); if(x!=y) { f[x]=y; ans+=e[i].v; road--; } if(road==0) break; } cout<<ans<<endl; } return 0;}
最小生成树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。