poj2251 Dungeon Master (bfs)
*题意:
给定三维迷宫,能走出来就输出最短用时,走不出输出
*代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char maze[31][31][31]; bool visit[31][31][31]; int queue[28000][3]; int time[31][31][31]; int l,c,r; int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; void bfs(int start[3],int end[3]) { int i,k,front=0,back=1,flag=0,temp[3],next[3]; queue[0][0]=start[0]; queue[0][1]=start[1]; queue[0][2]=start[2]; while(front<back) { temp[0]=queue[front][0]; temp[1]=queue[front][1]; temp[2]=queue[front++][2]; for(i=0;i<6;i++) { next[0]=temp[0]+dir[i][0]; next[1]=temp[1]+dir[i][1]; next[2]=temp[2]+dir[i][2]; if(next[0]<l&&next[1]<r&&next[2]<c&&next[0]>=0&&next[1]>=0&&next[2]>=0&&maze[next[0]][next[1]][next[2]]!='#'&&!visit[next[0]][next[1]][next[2]]) { time[next[0]][next[1]][next[2]]=time[temp[0]][temp[1]][temp[2]]+1; visit[next[0]][next[1]][next[2]]=1; if(next[0]==end[0]&&next[1]==end[1]&&next[2]==end[2]) { cout<<"Escaped in "<<time[end[0]][end[1]][end[2]]<<" minute(s)."<<endl; flag=1; break; } else { queue[back][0]=next[0]; queue[back][1]=next[1]; queue[back++][2]=next[2]; } } } if(flag) break; } if(!flag) cout<<"Trapped!"<<endl; } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int i,j,k,start[3],end[3]; while(cin>>l>>r>>c) { if(l==0&&r==0&&c==0) break; memset(visit,0,sizeof(visit)); memset(time,0,sizeof(time)); for(i=0;i<l;i++) for(j=0;j<r;j++) for(k=0;k<c;k++) { cin>>maze[i][j][k]; if(maze[i][j][k]=='S') { start[0]=i; start[1]=j; start[2]=k; visit[i][j][k]=1; } if(maze[i][j][k]=='E') { end[0]=i; end[1]=j; end[2]=k; } } bfs(start,end); } return 0; }