HDU1162最小生成树
来源:互联网 发布:tgp腾讯游戏客户端mac 编辑:程序博客网 时间:2024/05/29 16:19
题目大意:图上有n个点,相互连接,求连接的最小费用.
分析:最小生成树算法解决
Kruscal算法:
#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;struct struct_edges{ int bv,tv; double w;};struct_edges edges[10100];struct struct_a{ double x; double y;};struct_a arr_xy[105];int point[105],n,e;double sum;int kruscal_f1(int point[],int v){ int i= v; while(point[i]>0) i=point[i]; return i;}bool UDlesser(struct_edges a,struct_edges b){ return a.w<b.w;}void kruscal(){ int v1,v2,i,j; for(i=0;i<n;i++) point[i]=0; i=j=0; while(j<n-1&&i<e){ v1=kruscal_f1(point,edges[i].bv); v2=kruscal_f1(point,edges[i].tv); if(v1!=v2){ sum+=edges[i].w; point[v1]=v2; j++; } i++; }}int main(){// freopen("in.txt","r",stdin); int k=0,i,j; while(scanf("%d",&n)!=EOF){ sum=0; k++; for(i=0;i<n;i++) scanf("%lf%lf",&arr_xy[i].x,&arr_xy[i].y); e=0; for(i=0;i<n;i++) for(j=i+1;j<n;j++){ if(i==j) continue; edges[e].bv=i; edges[e].tv=j; edges[e].w=sqrt((arr_xy[i].x-arr_xy[j].x)*(arr_xy[i].x-arr_xy[j].x)+(arr_xy[i].y-arr_xy[j].y)*(arr_xy[i].y-arr_xy[j].y)); e++; } sort(edges,edges+e,UDlesser); kruscal(); printf("%.2lf\n",sum); } return 0;}
prim算法:
#include<iostream>#include<cmath>#include<cstdio>using namespace std;double sum,arr_list[105][105],mi;int i,j,k=0,n;struct struct_a{ double x; double y;};struct_a arr_xy[105];struct struct_b{ int point; double lowcost;};struct_b dosedge[105];void prim(int n){ int i,j,k; k=0; for(j=0;j<n;j++){ if(j!=k){ dosedge[j].point=k; dosedge[j].lowcost=arr_list[k][j]; } } dosedge[k].lowcost=0; for(i=0;i<n;i++){ mi=10000; for(j=0;j<n;j++){ if(dosedge[j].lowcost!=0&&dosedge[j].lowcost<mi){ k=j; mi=dosedge[j].lowcost; } } sum+=dosedge[k].lowcost; dosedge[k].lowcost=0; for(j=0;j<n;j++){ if(arr_list[k][j]<dosedge[j].lowcost){ dosedge[j].point=k; dosedge[j].lowcost=arr_list[k][j]; } } }}int main(){// freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF){ sum=0; k++; for(i=0;i<n;i++) scanf("%lf%lf",&arr_xy[i].x,&arr_xy[i].y); for(i=0;i<n;i++) for(j=0;j<n;j++) arr_list[i][j]=arr_list[j][i]=sqrt((arr_xy[i].x-arr_xy[j].x)*(arr_xy[i].x-arr_xy[j].x)+(arr_xy[i].y-arr_xy[j].y)*(arr_xy[i].y-arr_xy[j].y)); prim(n); printf("%.2lf\n",sum); } return 0;}
0 0
- hdu1162-最小生成树
- hdu1162最小生成树
- HDU1162最小生成树
- hdu1162最小生成树
- HDU1162 最小生成树 kruskal
- hdu1162(最小生成树prim)
- HDU1162 Eddy's picture 最小生成树
- hdu1162 Eddy's picture (prim最小生成树)
- hdu1162 Eddy's picture (最小生成树之prim 算法)
- HDU1162 Eddy's picture 【最小生成树Prim】
- hdu1162 Eddy's picture 并查集+最小生成树
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- hdu1162 Eddy's picture 最小生成树 prim
- hdu1162 Eddy's picture(图论:最小生成树-minimal spanning tree)
- hdu1162(并查集+Kruskal最小生成树)-- Eddy's picture
- hdu1162
- hdu1162
- hdu1162
- PHP Console工具使用分享
- MongoDB之整库备份还原单表collection备份还原
- 数据结构基础java实现—双向链表
- poj3009 冰球
- Android:圆形头像
- HDU1162最小生成树
- 网页宽度自动调整响应式网页
- 结合属性文件的工厂模式(java反射的应用)
- mysql 数据库导入导出方法总结(是时候总结)
- 用堆实现优先队列
- nyist5 暴力;kmp
- 10月28日
- mysql常用命令
- Java GC的工作原理