【CodingTrip - 携程编程大赛第三场】1003 携程全球数据中心建设
来源:互联网 发布:java 线程join 编辑:程序博客网 时间:2024/05/29 04:46
来源:HDU 携程编程大赛第一场
简单Prim,不过用一种很高端洋气的经纬度表示方法来表示两点之间的距离。gis学的东东。把距离合到map里边,最后就是套用prim模板的问题。
#include <iostream>#include <cmath>#include <cstring>using namespace std;double map[105][105];const double pi=3.14159265358979323846;const double INF=0x3f3f3f3f;int pointnum;int n;double prim(){ double low[105]; int flag[105]; memset(flag,0,sizeof(flag)); for(int i=1; i<=pointnum; i++) { low[i]=map[1][i]; } double count=0; flag[1]=1; for(int i=1; i<pointnum; i++) { double min=INF+1; int k; for(int j=1; j<=pointnum; j++) { if(flag[j]==0 && min>low[j]) { min=low[j]; k=j; } } flag[k]=1; count+=low[k]; for(int j=1; j<=pointnum; j++) { if(flag[j]==0&&low[j]>map[j][k]) { low[j]=map[j][k]; } } } return count;}void init(){ for(int i=1;i<105;i++) { for(int j=1;j<105;j++) map[i][j]=INF; }}class latipoint{ public: double lat; double lng;};double EARTH_RADIUS;double rad(double d){ return d * pi / 180.0;}double GetDistance(double lat1, double lng1, double lat2, double lng2){ double radLat1 = rad(lat1); double radLat2 = rad(lat2); double a = radLat1 - radLat2; double b = rad(lng1) - rad(lng2); double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1) * cos(radLat2) *pow(sin(b/2),2))); s = s * EARTH_RADIUS/2.0; return s;}int main(){ int testcase; cin>>testcase; while(testcase--) { init(); latipoint point[105]; double LineLength; cin>>EARTH_RADIUS>>LineLength; cin>>pointnum; for(int i=1;i<=pointnum;i++) { cin>>point[i].lat>>point[i].lng; } n=pointnum*pointnum; for(int i=1;i<=pointnum;i++) { for(int j=1;j<=pointnum;j++) { if(i!=j) { map[i][j]=GetDistance(point[i].lat,point[i].lng,point[j].lat,point[j].lng); //cout<<"map"<<i<<"to:"<<j<<"is: "<<map[i][j]<<endl; } } } double ret=prim(); //cout<<"haha:"<<ret<<"hehe:"<<LineLength<<endl; if(ret>LineLength) cout<<"N"<<endl; else cout<<"Y"<<endl; } return 0;}
3 0
- 【CodingTrip - 携程编程大赛第三场】1003 携程全球数据中心建设
- CodingTrip - 携程编程大赛 (预赛第一场)第三题 携程全球数据中心建设
- HDU 携程编程大赛 1003 携程全球数据中心建设 Prim OR Kruskal
- HDU 携程编程大赛 1003 携程全球数据中心建设 水题
- 【CodingTrip - 携程编程大赛第一场】1002 括号匹配
- CodingTrip - 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第二场)
- 携程第一场 第三题 携程全球数据中心建设 (最小生成树 经纬度距离)
- 【CodingTrip - 携程编程大赛第一场】1001 聪明的猴子
- CodingTrip - 携程编程大赛 (预赛第一场) 括号匹配
- CodingTrip - 携程编程大赛 (预赛第一场)旋转的二进制
- CodingTrip - 携程编程大赛 (预赛第一场)第四题
- CodingTrip - 携程编程大赛 (预赛第一场)第二题 括号匹配
- CodingTrip - 携程编程大赛 (预赛第二场):位图像素的颜色
- CodingTrip - 携程编程大赛 (预赛第二场):1001 剪刀石头布
- CodingTrip - 携程编程大赛 (预赛第一场) :1002 括号匹配
- java se
- 基于XMPP协议的aSmack源码分析
- Linux虚拟机和宿主机以及其他主机通信的办法
- 第四周作业——图的表示
- UIGestureRecognizer手势
- 【CodingTrip - 携程编程大赛第三场】1003 携程全球数据中心建设
- C#if/if-else/if-else-if语句
- 一、快速开始cocos2d-x开发
- ANDROID 在eclipse中没有出现AVD的解决方法
- org.springframework.web.util.NestedServletException: Handler processing failed; nested exception i
- @SuppressWarnings注解
- NSArray
- 如何迅速秒杀掉海量数据处理面试题
- 深入char、varchar、text和nchar、nvarchar、ntext的区别详解