UVA - 11624 Fire!两个bfs
2017-01-18 23:24
239 查看
就是有人要安全地从迷宫中逃出来,人在跑的时候,火也在蔓延,问人可不可以跑出来,如果可以,那需要多少时间 呢?
方法,用两个vis数组标记火经过这个点的时候需要多久,人经过这个点的时候需要多久。如果人经过这个点的时间小于火经过这个点的时间,这表示人可以在火蔓延到这个点之前就经过这个点。需要注意一下队列的清空。
方法,用两个vis数组标记火经过这个点的时候需要多久,人经过这个点的时候需要多久。如果人经过这个点的时间小于火经过这个点的时间,这表示人可以在火蔓延到这个点之前就经过这个点。需要注意一下队列的清空。
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <queue> using namespace std; #define maxn 1005 #define INF 0x3f3f3f3f struct zb { int x,y; // zb(int a,int b):x(a),y(b){} }; char M[maxn][maxn]; int visf[maxn][maxn]; int visj[maxn][maxn]; int fxx[4]={0,0,1,-1};//下上右左 int fxy[4]={1,-1,0,0}; queue <zb> Q; int y,x; void bfsf() { while(!Q.empty()) { zb t=Q.front(); Q.pop(); for(int i=0;i<4;i++) { int yy=t.y+fxy[i]; int xx=t.x+fxx[i]; if(yy>=0&&yy<y&&xx>=0&&xx<x&&visf[yy][xx]==INF&&M[yy][xx]!='#') { visf[yy][xx]=visf[t.y][t.x]+1; Q.push(zb{xx,yy}); } } } } int bfsj(zb bg) { while(!Q.empty()) Q.pop(); memset(visj,0,sizeof(visj)); Q.push(bg); visj[bg.y][bg.x]=0; while(!Q.empty()) { zb t=Q.front(); Q.pop(); if(visj[t.y][t.x]>=visf[t.y][t.x]) continue; if(t.x==0||t.x==x-1||t.y==0||t.y==y-1) return visj[t.y][t.x]+1; for(int i=0;i<4;i++) { int yy=t.y+fxy[i]; int xx=t.x+fxx[i]; if(yy>=0&&yy<y&&xx>=0&&xx<x&&!visj[yy][xx]&&M[yy][xx]!='#') { visj[yy][xx]=visj[t.y][t.x]+1; Q.push(zb{xx,yy}); } } } return -1; } int main() { int n; scanf("%d",&n); while(n 4000 --) { memset(M,0,sizeof(M)); memset(visf,INF,sizeof(visf)); while(!Q.empty()) Q.pop(); scanf("%d %d",&y,&x); for(int i=0;i<y;i++) scanf("%s",M[i]); zb bg; int flag=0; for(int i=0;i<y;i++) { for(int j=0;j<x;j++) { if(M[i][j]=='F') { flag++; Q.push(zb{j,i}); visf[i][j]=0; } if(M[i][j]=='J') { bg.y=i; bg.x=j; } } } bfsf(); int p= bfsj(bg); if(p==-1) printf("IMPOSSIBLE\n"); else printf("%d\n",p); } return 0; }
相关文章推荐
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA - 11624 Fire!两个bfs
- UVA 11624 Fire! (技巧BFS)
- UVA - 11624 Fire!(15.10.10 搜索专题)bfs
- uva11624 Fire! BFS搜索 TWT Tokyo Olympic 2combo-2
- uva 11624 - Fire!(Bfs)
- UVA 11624 Fire! 【经典bfs】
- uva 11624Fire! (bfs)
- UVA - 11624 - Fire! 两遍bfs
- uva 11624 大火蔓延的迷宫 Fire!(两次bfs)
- uva 11624 Fire!(bfs两次)
- UVA11624-Fire!(两次bfs)
- UVa 11624 Fire!(BFS 逃离火灾)
- UVA11624 Fire BFS
- UVA 11624 Fire! (两次BFS 火追人 )