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
原创粉丝点击