#include<stdio.h> #include<string.h> #include<queue> using namespace std; #define N 1100 struct nodde { int x,y; }f[N],start; int h,n,m,visitt[N][N]; int dis[4][2]={-1,0,1,0,0,1,0,-1}; char str[N][N]; struct node { int x,y,time,f; }; int judge(int x,int y) { if(x>=1&&x<=n&&y>=1&&y<=m&&str[x][y]!='#'&&!visitt[x][y]) return 1; return 0; } void bfs() { int i; queue<node>q; node cur,next; memset(visitt,0,sizeof(visitt)); for(i=0;i<h;i++) { cur.x=f[i].x; cur.y=f[i].y; cur.time=0; cur.f=1; q.push(cur); visitt[cur.x][cur.y]=1; } cur.x=start.x; cur.y=start.y; cur.time=0; cur.f=0; q.push(cur); while(!q.empty()) { cur=q.front(); if((cur.x==1||cur.x==n||cur.y==1||cur.y==m)&&cur.f==0) {//有可能起点就在边界上 printf("%d\n",cur.time+1); return ; } q.pop(); for(i=0;i<4;i++) { int xx=next.x=cur.x+dis[i][0]; int yy=next.y=cur.y+dis[i][1]; next.time=cur.time+1; next.f=cur.f; if(judge(xx,yy)) { visitt[xx][yy]=1; q.push(next); } } } printf("IMPOSSIBLE\n"); return ; } int main() { int i,j,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%s",str[i]+1); h=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(str[i][j]=='J') start.x=i,start.y=j; if(str[i][j]=='F') { f[h].x=i; f[h++].y=j; } } bfs(); } return 0; }
uva 11624
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
uva11624
Fire-uva11624 WA想了半天不知道为啥,就是两次bfs就好啦。 后来看题才注意到“火可能不
#include i++ 双向bfs -
UVA - 11624 Fire!(双层BFS)
延的时候把一些能...
广搜 i++ #include