hdu 1245 saving james band
来源:互联网 发布:linux 断电 丢失 文件 编辑:程序博客网 时间:2024/06/05 02:12
主题思想: 根据数据构造图,然后利用图算法,求最短路径,最短路采用SPFA算法。
SPFA算法模板:
queue<int> q;int start;q.push(start);while(!q.empty()){ int now=q.front(); q.pop(); // update all node 这里是重点,更新所有节点 for(int i=0;i<n;i++){ if(dist[now]+g[now][i]<dist[i]){ dist[i]=dist[now]+g[now][i]; if(!visited[i]) { visited[i]=true; q.push(i); } } }//now maybe update later; 这里也是重点,出队列后,还可能重新放进去,所以去除标记。visited[now]=false;}
参考博客:
http://blog.csdn.net/zchahaha/article/details/51029798
AC代码:
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<algorithm>using namespace std;const double INF=0x3fffffff;const double eps=1e-8;const int maxn=105;double gx[maxn];double gy[maxn];double g[maxn][maxn];int n;double d;int pre[maxn];bool visited[maxn];double dis[maxn];void spfa(int start){ queue<int> q; memset(visited,false,sizeof(visited)); for(int i=0;i<=n+1;i++){ dis[i]=INF; pre[i]=-1; } while(!q.empty())q.pop(); q.push(start); dis[start]=0.0; visited[start]=true; pre[start]=-1; int now; int next; while(!q.empty()){ now=q.front(); q.pop(); //update all node for(int i=0;i<=n+1;i++) { if(dis[i]>dis[now]+g[now][i]){ dis[i]=dis[now]+g[now][i]; pre[i]=now; if(!visited[i]){ visited[i]=true; q.push(i); } } } visited[now]=true; } if(dis[n+1]>=INF){ printf("can't be saved\n"); return ; } int j=n+1; int cnt=0; while(pre[j]!=-1){ j=pre[j]; cnt++; } printf("%.2lf %d\n",dis[n+1],cnt); return;}int main(){ int x,y; while(scanf("%d %lf",&n,&d)!=EOF){ if(n==0){ if(d>=42.5){ printf("42.5 1\n"); }else{ printf("can't be saved\n"); } continue; } for(int i=1;i<=n;i++){ scanf("%lf%lf",&gx[i],&gy[i]); } //build the map gx[0]=0; gy[0]=0; g[0][0]=0; for(int i=0;i<=n;i++){ for(int j=i+1;j<=n;j++){ g[i][j]=sqrt((gx[i]-gx[j])*(gx[i]-gx[j])+(gy[i]-gy[j])*(gy[i]-gy[j])); if(i==0)g[i][j]-=7.5; if(g[i][j]<0) g[i][j]=0; if(g[i][j]>d) g[i][j]=INF; g[j][i]=g[i][j]; } } // for(int i=0;i<=n;i++){ double c=min(50-gx[i],50-gy[i]); c=min(c,min(50+gx[i],50+gy[i])); if(c>d) c=INF; g[i][n+1]=g[n+1][i]=c; } spfa(0); } return 0;}
阅读全文
0 0
- hdu 1245 saving james band
- hdu 1245 Saving James Bond
- HDU 1245 Saving James Bond
- HDU 1245 Saving James Bond
- HDU-1245-Saving James Bond
- hdu 1245 Saving James Bond
- HDU 1245 Saving James Bond(Floyd)
- 【HDU】1245 Saving James Bond 最短路
- hdu 1245 Saving James Bond dij
- hdu 1245 Saving James Bond【floyd】
- SFPA hdu 1245 Saving James Bond
- Saving James Bond HDU
- HDU 1245 Saving James Bond 高精度(好题)
- HDOJ 1245 Saving James Bond
- 【最短路+dijkstra+有难度】杭电 hdu 1245 Saving James Bond
- HDU 1245 Saving James Bond 计算几何建图+最短路
- hdu 1245 Saving James Bond 策画几何+最短路 最短路求步数最少的路径
- hdu 1245 Saving James Bond 最短路spfa+简单计算几何
- Django模板
- FreeType之字形分析(二)
- Secondary NameNode:它究竟有什么作用?
- spring事务五大隔离级别、七大传播行为
- SQL练习题
- hdu 1245 saving james band
- Android权限Uri.parse用法
- 1118. Birds in Forest (25)
- matlab2c使用c++实现matlab函数系列教程-raylpdf函数
- JavaScipt学习——套公式学习作用域
- hdfs的一些操作
- 使用Vue-cli创建项目
- 关于两个用户用同一浏览器不能同时登录同一网站的问题(session覆盖问题)
- 百万级访问量网站的技术准备工作