bfs的三维棋盘
作者:互联网
题目:
Dungeon Master
poj2251
https://vjudge.net/problem/POJ-2251
#include<cstdio> #include<string.h> #include<queue> using namespace std; int l,r,c; char ch[32][32][32]; int d[32][32][32]; int xx[7]={1,-1,0,0,0,0}; int yy[7]={0,0,1,-1,0,0}; int zz[7]={0,0,0,0,1,-1}; struct node { int x,y,z; }; queue<node> q; int bfs(node st) { while(!q.empty()) q.pop(); d[st.x][st.y][st.z]=0; q.push(st); while(!q.empty()) { node te=q.front(); q.pop(); int x=te.x,y=te.y,z=te.z; ch[x][y][z]='#'; for(int i=0;i<6;i++) { int tx=x+xx[i]; int ty=y+yy[i]; int tz=z+zz[i]; if(tx<0||tx>=l||ty<0||ty>=r||tz<0||tz>=c) continue; if(ch[tx][ty][tz]=='#') continue; d[tx][ty][tz]=d[x][y][z]+1; if(ch[tx][ty][tz]=='E') return d[tx][ty][tz]; node tt; tt.x=tx; tt.y=ty; tt.z=tz; ch[tx][ty][tz]='#'; q.push(tt); } } return -1; } int main() { while(1) { int stx,sty,stz; scanf("%d %d %d",&l,&r,&c); if(l==0&&r==0&&c==0) break; for(int i=0;i<l;i++) for(int j=0;j<r;j++) { getchar(); scanf("%s",ch[i][j]); for(int k=0;k<strlen(ch[i][j]);k++) { if(ch[i][j][k]=='S') { stx=i; sty=j; stz=k; } } } node st; st.x=stx; st.y=sty; st.z=stz; int ans=bfs(st); if(ans==-1) { printf("Trapped!\n"); } else { printf("Escaped in %d minute(s).\n",ans); } } }
标签:ch,tz,tx,ty,int,32,三维,bfs,棋盘 来源: https://www.cnblogs.com/aacm/p/14969862.html