双向BFS--Uva-11624
来源:互联网 发布:fifaol3 数据库 编辑:程序博客网 时间:2024/04/29 17:57
题意:john要从迷宫里逃跑,迷宫里有着火的地方,并且火势可以蔓延,问john是否可以逃出来,如果可以输出最短时间。
思路:我觉得这道题很好,以前没做过,需要从两个方向进行搜索,首先对火进行处理,保存下火到达每个格子的时间,然后再对john进行bfs,在对john进行bfs是,只需要加一个条件,判断john到达每个格子的时间与原来火到达此地的时间,哪个大。
代码如下:
#include<iostream>#include<cstring>#include<queue>#include<cstdio>#include<algorithm>#include<climits>using namespace std;const int maxn=1010;const int inf=100000000;struct A{ int x,y,tim;};char maze[maxn][maxn];int Time[maxn][maxn];int vis[maxn][maxn];int sx,sy;int r,c;int dx[]= {1,-1,0,0};int dy[]= {0,0,1,-1};queue<A> fire;int ans;void bfs(int num){ A a; while(!fire.empty()) { a=fire.front(); fire.pop(); if(num) if((a.x>=r)||(a.x<=1)||(a.y>=c)||(a.y<=1)) { ans=min(a.tim,ans); } A b; for(int i=0; i<4; i++) { b.x=a.x+dx[i]; b.y=a.y+dy[i]; if(b.x>=1&&b.x<=r&&b.y>=1&&b.y<=c&&(maze[b.x][b.y]!='#')&&(!vis[b.x][b.y])&&(Time[b.x][b.y]>a.tim+1)) { b.tim=a.tim+1; Time[b.x][b.y]=b.tim; vis[b.x][b.y]=1; fire.push(b); } } }}int main(){ //freopen("in.txt","r",stdin); int t; cin>>t; while(t--) { cin>>r>>c; A p; //memset(maze ,'\0',sizeof(maze)); for(int i=1;i<=fire.size();i++) fire.pop(); ans=0; for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) { cin>>maze[i][j]; if(maze[i][j]=='J') sx=i,sy=j; if(maze[i][j]=='F') { p.x=i,p.y=j,p.tim=1; vis[p.x][p.y]=1; fire.push(p); } Time[i][j]=inf; } memset(vis,0,sizeof(vis)); bfs(0); ans=inf; memset(vis,0,sizeof(vis)); p.x=sx,p.y=sy,p.tim=1; vis[p.x][p.y]=1; fire.push(p); bfs(1); if(ans!=inf) cout<<ans<<endl; else cout<<"IMPOSSIBLE"<<endl; } return 0;}
- 双向BFS--Uva-11624
- UVA - 1601(双向BFS)
- uva 704 - Colour Hash map+双向bfs
- Colour Hash (Uva 704 双向bfs)
- UVa 1601 The morning after Halloween(单向BFS+双向BFS)
- UVa 704 - Colour Hash, 双向bfs,很给力
- UVA 704 Colour Hash (双向bfs + 判重)
- (intermediate) 双向bfs UVA 11212 Editing a Book
- UVA - 704 Colour Hash(双向bfs+hash+线性表)
- UVa 1601 - The Morning after Halloween(双向BFS版)
- UVA - 1601(双向BFS+预处理+状态压缩位运算)
- uva 1601万圣节后的早晨 双向bfs
- uva 11624(BFS)
- UVA 11624 BFS Fire
- UVa Fire! 11624 (BFS)
- uva 11624 - Fire! bfs
- UVa 11624 Fire! / BFS
- UVa 11624 Fire! bfs
- POJ 3349 Snowflake Snow Snowflakes
- Aizu 2249 Road Construction(SPFA)
- delphi中调用http xml
- Android.mk文件分析
- dojo editor localimag
- 双向BFS--Uva-11624
- 短训学习录(二)——有兄弟不孤单
- JavaBean的命名规则
- mini2440的按键驱动
- CString , COleDateTime, CTime相互转换和对时间的一些处理
- Milk Patterns(poj 3261,后缀数组)
- uva 10056
- 经济学原理---1 经济学十大原理 --- 读书笔记
- vim下c++开发详细配置(媲美IDE)--2[转]