hdu 1162 Eddy's picture
2013-08-17 15:55
218 查看
链接:点击打开链接
给你点的横坐标,纵坐标,让你找一条最短的路把这些点连起来。
给你点的横坐标,纵坐标,让你找一条最短的路把这些点连起来。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const double INF=0xffffff; double edge[105][105]; int nn,vis[105]; void prime(int x){ int i,j,k; double sum_i,mark[105],mi_n; for(i=1;i<=nn;i++){ mark[i]=edge[x][i]; vis[i]=0; } vis[x]=1; sum_i=0; for(i=1;i<=nn;i++){ mi_n=INF; for(j=1;j<=nn;j++){ if(!vis[j]&&mark[j]<mi_n){ mi_n=mark[j]; k=j; } } vis[k]=1; if(mi_n!=INF) sum_i+=mi_n; for(j=1;j<=nn;j++){ if(!vis[j]&&edge[k][j]<mark[j]) mark[j]=edge[k][j]; } } printf("%.2lf\n",sum_i); } double jisuan(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } int main(){ int i,j; double x[105],y[105]; while(~scanf("%d",&nn)){ for(i=1;i<=nn;i++) for(j=1;j<=nn;j++) edge[i][j]=INF; for(i=1;i<=nn;i++) scanf("%lf %lf",&x[i],&y[i]); for(i=1;i<=nn;i++) for(j=i+1;j<=nn;j++){ double ans=jisuan(x[i],y[i],x[j],y[j]); edge[i][j]=ans; edge[j][i]=ans; } prime(1); } return 0; }
相关文章推荐
- hdu-1162-Eddy's picture
- HDU 1162 Eddy's picture(点连通:最小生成树)
- HDU 1162 prime+邻接矩阵
- HDU 1162 Eddy's picture(图论-最小生成树)
- HDU 1162 Eddy's picture(最小生成树)
- HDU 1162 Eddy's picture 最小生成树
- hdu 1162(Kruskal)
- hdu 1162 Eddy's picture(最小生成树算法)
- hdu 1162
- hdu 1162(最小生成树)
- hdu 1162
- HDU 1162 Eddy's picture(MST)
- 杭电Hdu 1162 Eddy's picture
- HDU1162-Eddy's picture(最小生成树)
- HDU 1162 Eddy's picture MST(基础)
- HDU 1162 Prim
- hdu 1162
- hdu 1162
- hdu 1162 Eddy's picture(最小生成树)
- HDU 1162 Eddy's picture (Kruscal最小生成树)