hdu 1162 Eddy's picture
2013-02-19 08:58
155 查看
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> /**************************************************************************/ typedef struct{ double x,y; }Point; typedef struct{ int a,b; double cost; }Edge; /**************************************************************************/ Edge input[5050]; int parent[120]; Point P[120]; /**************************************************************************/ int cmp(const void *a,const void *b){ return (((Edge *)a)->cost > ((Edge *)b)->cost) ? 1:-1; } /**************************************************************************/ int root(int n){ if(parent == 0) return n; else return parent = root(parent ); } /**************************************************************************/ double kruskal(int N){ int a_root,b_root; double sum = 0.0; for(int i = 0; i < N;++i){ a_root = root(input[i].a); b_root = root(input[i].b); if( a_root != b_root){ a_root < b_root?parent[b_root] = a_root:parent[a_root] = b_root; sum += input[i].cost; } } return sum; } /**************************************************************************/ int build_edge(int p_num){ int top = 0; for(int i = 0; i < p_num; ++i){ for(int j = i + 1;j < p_num; ++j){ input[top].cost = sqrt(pow((P[i].x - P[j].x),2) + pow(P[i].y-P[j].y,2)); input[top].a = i + 1; input[top].b = j + 1; ++top; } } return top; } /**************************************************************************/ int main(int argc, char *argv[]) { //FILE *fp; //fp = freopen("in5.txt","r",stdin); int N;//顶点的数目; int edge_NUM;//边的数目 while(~scanf("%d",&N)){ for(int i = 0;i < N;++i){ scanf("%lf%lf",&P[i].x,&P[i].y); } memset(parent,0,sizeof(parent)); edge_NUM = build_edge(N); qsort(input,N,sizeof(Edge),cmp); printf("%.2lf\n", kruskal(edge_NUM)); } return 0; } /**************************************************************************/
相关文章推荐
- HDU 1162 Eddy's picture【Prim+】
- HDU1162---Eddy's picture
- hdu 1162 Eddy's picture(最小生成树Kruskal)
- HDU-1162-Eddy's picture
- hdu1162 Eddy's picture 最小生成树 prim
- hdu 1162 Eddy's picture
- HDU-1162(最小生成树)
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- hdu 1162 Eddy's picture
- hdu1162——初学最小生成树
- Hdu-1162 Eddy's picture
- HDU 1162 Eddy's picture Kruskal算法
- HDU 1162 Eddy's picture
- HDU 1162 Eddy's picture
- hdu 1162 Eddy's picture
- HDU-1162-Eddy's picture
- HDU 1162 Eddy's picture【最小生成树,Prime算法+Kruskal算法】
- hdu 1162 Prim
- HDU 1162 prime+邻接矩阵
- HDU 1162 Eddy's picture(图论-最小生成树)