hdu1245 Saving James Bond ,卡精度
来源:互联网 发布:淘宝上老克勒卖假黄金 编辑:程序博客网 时间:2024/06/06 07:13
最短路问题,数据小,各种算法都可以,我用dijkstra和floyd两种算法都提交成功了。
可以将不多于一百只鳄鱼转化为点,小岛做起点,岸边作终点,注意小岛告诉我们直径,应该考虑进去。
这题据说很卡精度,我wa了许多次才过的。写的时候比较晕,结果出了一堆问题,居然把step变量类型定义错误。。。
不过,纠结的是,这道题我用GCC和G++提交都不行,用C++和C就ac了,比较无语。
dijkstra:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define INF 200000000double x[102],y[102],map[102][102],dis[102];int visit[102],n,step[102];void dij(){ int i,j,k,min,v; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++) { for(j=1,min=INF,v=0;j<=n;j++) { if(visit[j]!=1&&dis[j]<min) { min=dis[j]; v=j; } } visit[v]=1; for(j=1;j<=n+1;j++) { if(dis[v]+map[v][j]<dis[j]) { dis[j]=dis[v]+map[v][j]; step[j]=step[v]+1; } else if(dis[v]+map[v][j]==dis[j]) { if(step[j]>step[v]+1) step[j]=step[v]+1; } } } if(dis[n+1]!=INF) printf("%.2lf %d\n",dis[n+1],step[n+1]); else printf("can't be saved\n");}double mm(double a,double b){ return a>b?b:a;}int main(){ int i,j,k,l; double d; while(scanf("%d%lf",&n,&d)!=EOF) { for(i=0;i<=n+1;i++) dis[i]=INF; for(i=0;i<=n+1;i++) for(j=0;j<=n+1;j++) map[i][j]=INF; for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j]))<=d) { map[i][j]=sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j])); map[j][i]=sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j])); } } if(sqrt(fabs(x[i])*fabs(x[i])+fabs(y[i])*fabs(y[i]))-7.5<=d) { if(sqrt(fabs(x[i]-0)*fabs(x[i]-0)+fabs(y[i]-0)*fabs(y[i]-0))-7.5>0) { dis[i]=sqrt(fabs(x[i]-0)*fabs(x[i]-0)+fabs(y[i]-0)*fabs(y[i]-0))-7.5; step[i]=1; } } if(fabs(fabs(x[i])-50)<=d||fabs(fabs(y[i])-50)<=d) map[i][n+1]=mm(fabs(fabs(x[i])-50),fabs(fabs(y[i])-50)); else map[i][n+1]=INF; } dij(); /*for(i=1;i<=n+1;i++) { for(j=1;j<=n+1;j++) printf("%lf ",map[i][j]); printf("\n"); } for(i=1;i<=n+1;i++) printf("%lf ",dis[i]); printf("\n");*/ } return 0;}floyd:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define INF 200000000double x[102],y[102],map[102][102];int n,step[102][102];double mm(double a,double b){ return a>b?b:a;}int main(){ int i,j,k,l; double d; while(scanf("%d%lf",&n,&d)!=EOF) { for(i=0;i<=n+1;i++) for(j=0;j<=n+1;j++) map[i][j]=INF; for(i=0;i<=n+1;i++) map[i][i]=0; for(i=0;i<=n+1;i++) for(j=0;j<=n+1;j++) { if(i==j) step[i][j]=0; else step[i][j]=1; } /*for(i=0;i<=n+1;i++) { for(j=0;j<=n+1;j++) printf("%.2lf ",map[i][j]); printf("\n"); } for(i=0;i<=n+1;i++) { for(j=0;j<=n+1;j++) printf("%d ",step[i][j]); printf("\n"); }*/ for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j]))<=d) { map[i][j]=sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j])); map[j][i]=sqrt(fabs(x[i]-x[j])*fabs(x[i]-x[j])+fabs(y[i]-y[j])*fabs(y[i]-y[j])); } } if(sqrt(fabs(x[i])*fabs(x[i])+fabs(y[i])*fabs(y[i]))-7.5<=d) { if(sqrt(fabs(x[i]-0)*fabs(x[i]-0)+fabs(y[i]-0)*fabs(y[i]-0))-7.5>0) { map[0][i]=sqrt(fabs(x[i]-0)*fabs(x[i]-0)+fabs(y[i]-0)*fabs(y[i]-0))-7.5; } } if(fabs(fabs(x[i])-50)<=d||fabs(fabs(y[i])-50)<=d) map[i][n+1]=mm(fabs(fabs(x[i])-50),fabs(fabs(y[i])-50)); } for(k=0;k<=n+1;k++) for(i=0;i<=n+1;i++) for(j=0;j<=n+1;j++) { if(map[i][k]+map[k][j]<map[i][j]) { map[i][j]=map[i][k]+map[k][j]; step[i][j]=step[i][k]+step[k][j]; } else if(map[i][k]+map[k][j]==map[i][j]) { if(step[i][j]>step[i][k]+step[k][j]) step[i][j]=step[i][k]+step[k][j]; } } if(map[0][n+1]==INF) printf("can't be saved\n"); else printf("%.2lf %d\n",map[0][n+1],step[0][n+1]); } return 0;}
- hdu1245 Saving James Bond ,卡精度
- hdu1245 Saving James Bond
- HDU1245:Saving James Bond(Floyd)
- HDU1245:Saving James Bond(Floyd)
- HDU1245(Saving James Bond)最短路径-Floyd
- HDU1245 Saving James Bond(最短路+简单几何)
- Saving James Bond HDU
- Saving James Bond
- Saving James Bond
- Saving James Bond
- HDOJ 1245 Saving James Bond
- hdu 1245 Saving James Bond
- HDU 1245 Saving James Bond
- Saving James Bond+迪杰斯特拉算法
- HDU 1245 Saving James Bond
- Saving James Bond - Easy Version
- Saving James Bond - Hard Version
- Saving James Bond - Easy Version
- sdjzu 1048
- cmd启动tomcat
- Ubuntu安装mysql-server、mysql-client、workbench(mysql图形管理工具)
- ALSA and TinyAlsa
- PHP与Ajax的交互更新页面
- hdu1245 Saving James Bond ,卡精度
- 适配器模式
- JS设计模式之组合模式
- sdjzu 1052
- 手动删除归档日志后要做crosscheck
- linux根文件系统 /etc/resolv.conf 文件详解
- POJ 1135/ZOJ 1298 Domino Effect
- 单链表的归并排序
- hdu1269 迷宫城堡 强连通分量 tarjan算法(前向星实现)