poj3897
来源:互联网 发布:雷云mac版安装失败 编辑:程序博客网 时间:2024/04/30 20:14
#include <iostream>#include <cstring>#include <queue>#include <cstdio>#include <cmath>#include <string>using namespace std;#define eps 1e-8#define maxn 105struct position{int x;int y;};position S,E;queue<position>Q;bool vis[maxn][maxn];char map[maxn][maxn];double dis[maxn][maxn];int N,M;double L;int dx[]={-1,1,0,0};int dy[]={0,0,1,-1};double BFS(double x){for(int i=1;i<=N;i++)for(int j=1;j<=M;j++)dis[i][j]=10000000000000000.0;memset(vis,0,sizeof(vis));while(!Q.empty())Q.pop();Q.push(S);vis[S.x][S.y]=1;dis[S.x][S.y]=0.0;while(!Q.empty()){position u=Q.front();Q.pop();vis[u.x][u.y]=0;double ss;for(int j=0;j<4;j++){if(j<2)ss=x;else ss=1.0;int tx=u.x+dx[j];int ty=u.y+dy[j];if((map[tx][ty]==' '||map[tx][ty]=='E'||map[tx][ty]=='S')&&dis[u.x][u.y]+ss<dis[tx][ty]){if(!vis[tx][ty]) { vis[tx][ty]=1; position p; p.x=tx,p.y=ty; Q.push(p); }dis[tx][ty]=dis[u.x][u.y]+ss;}}}return dis[E.x][E.y];}double search(){double l=0.0;double r=1000.0;double mid;while(fabs(l-r)>eps){mid=0.5*(l+r);double H=BFS(mid);if(fabs(H-L)<eps)return 100.0*mid;if(H>L)r=mid;else l=mid;}return 100.0*l;}int main(){int kase;int id=0;for(cin>>kase;kase--;){scanf("%lf%d",&L,&N);memset(map,0,sizeof(map));getchar();for(int i=1;i<=N;i++) {gets(map[i]+1);M=strlen(map[i]+1);for(int j=1;map[i][j];j++)if(map[i][j]=='E')E.x=i,E.y=j;else if(map[i][j]=='S')S.x=i,S.y=j;}printf("Case #%d: %.3lf%%\n",++id,search());}return 0;}
0 0
- poj3897
- poj3897 Maze Stretching
- 【搜索】[POJ3897]Maze Stretching
- poj3897 Maze Stretching 二分+bfs
- [POJ3897] Maze Stretching (二分)(A*)
- POJ3897 Maze Stretching (二分+BFS)
- Maze Stretching Poj3897 二分+BFS
- #POJ3897#Maze Stretching(A* + 二分)
- Javascript Leanring Function(3)
- 省赛小感想
- 第11周 项目一1.1 班长和学生的信息 对类进行继承
- OGNL语言解析
- 求多个选择情况下的函数值
- poj3897
- C#使用多维数组
- 本地表、远程表的复制操作(SQL命令行)
- OpenCV2马拉松第15圈——边缘检测(Laplace算子,LOG算子)
- leetcode Linked List Cycle & Linked List Cycle II
- 如何搭建私有云平台
- Google CodeJam 2014 Round 1C
- 创新实验室实习生每周工作总结【实习第六周】
- 第11周 项目一 1.2 班长和学生的信息 体验版