poj2253 最短路
2015-07-20 23:58
218 查看
题意:青蛙跳石头,给出石头的坐标,然后要确定一条路径,使路径上的最大跨度最小,其实也是一道最短路问题,只要将更新条件从总距离最短改为最大跨度最小就行,即从某点到当前点路径上的最大跨度如果小于当前点原本记录下的最大跨度,或当前点还没有被访问过,无最大跨度,那么就更新它,然后以此为条件跑dij或者spfa就行了
dij:
spfa
dij:
#include<stdio.h> #include<string.h> #include<queue> #include<math.h> #define max(a,b) a>b?a:b const double INF=10000.0; using namespace std; struct point{ int x,y; }p[205]; double g[205][205],dist[205]; bool vis[205]; int n; void spfa(int s,int p){ int i; for(i=1;i<=n;i++){ dist[i]=INF; } memset(vis,0,sizeof(vis)); dist[s]=0; queue<int>q; q.push(s); vis[s]=1; while(!q.empty()){ int u=q.front(); q.pop(); vis[u]=0; for(i=1;i<=n;i++){ double j=max(dist[u],g[u][i]); if(i!=u&&dist[i]>j){ dist[i]=j; if(!vis[i]){ q.push(i); vis[i]=1; } } } } printf("%.3lf\n\n",dist[p]); } int main(){ int c=0; while(scanf("%d",&n)!=EOF&&n!=0){ int i,j; for(i=1;i<=n;i++){ scanf("%d%d",&p[i].x,&p[i].y); for(j=1;j<=i;j++){ g[i][j]=g[j][i]=sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)*1.0+(p[i].y-p[j].y)*(p[i].y-p[j].y)*1.0); } } printf("Scenario #%d\nFrog Distance = ",++c); spfa(1,2); } return 0; }
spfa
相关文章推荐
- 简单解释Windows如何使用FS段寄存器
- xcode7 如何真机测试
- [转]QML使用WebView遇到的QSslSocket问题解决
- 西门子ANY变量的高级用法:
- NSURLSession学习笔记(三)Download Task
- 字符串C - Automatic Poetry
- mysql + SpringMVC + MyBatis中批量插入实例以及@Param注解的用法
- DirectX11 着色器资源视图
- SuperSocket快速入门(三):实现你的AppServer和AppSession
- 十三、C# 事件
- 进程与线程的区别
- Linux系统部署项目常用命令(三)
- char *s="string"和char s[]="string"的区别
- QQ互联账号登录
- NSURLSession学习笔记(二)Session Task
- HDUOJ1094
- 字符串B Where's Waldorf?
- jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
- Ubuntu安装
- android 仪表盘的实现 方式一