hdu--最小生成树之百岛湖
来源:互联网 发布:好看的潮牌 知乎 编辑:程序博客网 时间:2024/05/16 05:32
最短路prim的模板:
hdu1875畅通工程续
题目链接:点击打开链接
这个题有个坑的地方就是,并不是出现了距离小于10或者大于1000的两个岛就要输出oh!,有可能在构建最小生成树的时候并不用把它这条路加进去,只需要理解了这里就能解决问题了:
#include <stdio.h>#include <iostream>#include <math.h>#include <string.h>using namespace std;const double INF=10000000000000.00;double map[105][105],dist[105];int x[105],y[105],vis[105];int c;void getmap(int a){int i;double k;for(i=a+1;i<=c;i++){k=sqrt((x[a]-x[i])*(x[a]-x[i])+(y[a]-y[i])*(y[a]-y[i]));if(k<10.00||k>1000.00) { map[a][i]=map[i][a]=INF; //continue;}else map[a][i]=map[i][a]=k;}}double prim(){int i,j;double sum=0.0;memset(vis,0,sizeof(vis));for(i=1;i<=c;i++) dist[i]=map[1][i];dist[1]=0.0;vis[1]=1;for(i=1;i<=c;i++){double minn=INF;int k=-1;for(j=1;j<=c;j++){if(dist[j]<=minn&&vis[j]==0){minn=dist[j];k=j;}}if(k==-1) break;//cout<<minn<<endl;//if(minn==INF)sum+=minn;vis[k]=1;for(j=1;j<=c;j++){if(dist[j]>map[k][j]&&vis[j]==0){dist[j]=map[k][j];}}}return sum;}int main(){int t;scanf("%d",&t);while(t--){scanf("%d",&c);int i;for(i=1;i<=c;i++){scanf("%d %d",&x[i],&y[i]);}for(i=1;i<=c;i++){getmap(i);}double sum=prim()*100.00;//printf("%.1f\n",sum);if(sum>=INF) printf("oh!\n");else printf("%.1f\n",sum);}return 0;}
0 0
- hdu--最小生成树之百岛湖
- HDU--1233最小生成树之kruskal算法
- HDU 1879 最小生成树
- HDU-1836 最小生成树
- hdu 1863 最小生成树
- hdu 1233 最小生成树
- hdu 4081 最小生成树
- hdu 1863 最小生成树
- HDU-1162(最小生成树)
- hdu 1233 最小生成树
- hdu 2682 最小生成树
- HDU 1102 最小生成树
- HDU 1162 最小生成树
- HDU 1233 最小生成树
- HDU 1301 最小生成树
- HDU 1863 最小生成树
- HDU 1879 最小生成树
- HDU 3371 最小生成树
- 【9803】硬币翻转
- nginx的反向代理和负载均衡的区别是什么
- 实现JTree双击节点的可编辑
- Linux文件权限详解
- 服务器get post 请求回调
- hdu--最小生成树之百岛湖
- Present ViewController详解
- 请求数据
- 在ubuntu14.04上搭建Objective-C开发环境
- PullToRefresh一些实用的用法
- Spring +slf4j logger
- Python 面向对象(2)-1
- java核心JVM
- 面试题总结2