POJ 1751 Highways (kruskal)
2017-07-21 13:08
330 查看
题目链接:http://poj.org/problem?id=1751
题目大意:给出n个村庄的坐标 和已经了m条路 现在要求建最短的路 将所有村庄连起来 将这些路输出
思路;这题可以用kruskal来做 通过n个点 枚举出所有的边长建立图 然后kruskal的模板题
题目大意:给出n个村庄的坐标 和已经了m条路 现在要求建最短的路 将所有村庄连起来 将这些路输出
思路;这题可以用kruskal来做 通过n个点 枚举出所有的边长建立图 然后kruskal的模板题
#include <iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<string.h> using namespace std; #define maxn 1010 struct node { int x,y; }s[maxn];//村庄坐标 int u[maxn*maxn/2],v[maxn*maxn/2],w[maxn*maxn/2]; int r[maxn*maxn/2],pre[maxn*maxn/2]; int find(int x) { int r=x; while(pre[r]!=r) { r=pre[r]; } int i=x,j; while(i!=r) { j=pre[i]; pre[i]=r; i=j; } return r; } int dis(int x1,int y1,int x2,int y2) { return (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1); } bool cmp(int x,int y) { return w[x]<w[y]; } void join(int x,int y) { int fx=find(x),fy=find(y); if(fx!=fy) { pre[fx]=fy; } } void init() { int m; scanf("%d",&m); while(m--) { int a,b; scanf("%d%d",&a,&b); join(a,b); } } bool check(int n) { int ans=find(1); for(int i=2;i<=n;i++) if(find(i)!=ans) return false; return true; } void kruskal(int n,int t) { for(int i=1;i<=n;i++) { pre[i]=i; } for(int i=0;i<t;i++)r[i]=i; sort(r,r+t,cmp); init(); for(int i=0;i<t;i++) { int e=r[i],x=find(u[e]),y=find(v[e]); if(x!=y)//如果不在一个集合之中 在将其将入并入一个集合 同时输出这条边 { pre[x]=y; printf("%d %d\n",u[e],v[e]); } if(check(n))//检验是否已经都在一个集合之中 break; } } int main() { int a,b; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&s[i].x,&s[i].y); } int t=0; for(int i=1;i<=n;i++)//任意两个城市之间的距离 { for(int j=i+1;j<=n;j++) { u[t]=i,v[t]=j,w[t]=dis(s[i].x,s[i].y,s[j].x,s[j].y); t++; } } kruskal(n,t); return 0; }
相关文章推荐
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- 分量算法poj 1751 Highways 最小生成树之Kruskal(克鲁斯卡尔)算法
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- POJ 1751 Highways (kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways 最小生成树之Kruskal(克鲁斯卡尔)算法
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- POJ - 1751----Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways(Kruskal)
- poj 1751 Highways (prim和kruskal)
- poj 1751 Highways(Kruskal)
- POJ 1751 Highways (Kruskal 最小生成树)
- POJ 1751 Highways 最小生成树 Kruskal && Prim