【题目大意】
给你一个三维的迷宫,让你计算从入口走到出口最少步数。
【题目分析】
其实和二维迷宫还是一样的,还是用队列来做,由于BFS算法一般是不需要回溯的,所以我们就用不着还用一个visit数组来记录是否访问过,直接将走过的结点置为不可走就可。
//Memory Time// 356K 32MS#include#include #include #include #include #include #include using namespace std;struct Node{ int x,y,z; int step;};queue que;char Map[50][50][50];int sx,sy,sz;int ex,ey,ez;int dir_x[]={-1,1,0,0,0,0};int dir_y[]={ 0,0,-1,1,0,0};int dir_z[]={ 0,0,0,0,1,-1};void read(int n,int row,int col){ int i,j,k; for(i=0;i >Map[i][j][k]; if(Map[i][j][k]=='S') { sx=i; sy=j; sz=k; } else if(Map[i][j][k]=='E') { ex=i; ey=j; ez=k; } } getchar(); } getchar(); }}void BFS(){ Node q; q.x=sx; q.y=sy; q.z=sz; q.step=0; que.push(q); while(!que.empty()) { Node tp=que.front(); que.pop(); int x=tp.x; int y=tp.y; int z=tp.z; int step=tp.step; for(int i=0;i<6;i++) { int tx=x+dir_x[i]; int ty=y+dir_y[i]; int tz=z+dir_z[i]; if(Map[tx][ty][tz]=='.') { Node Q; Q.x=tx; Q.y=ty; Q.z=tz; Q.step=step+1; que.push(Q); Map[tx][ty][tz]='#'; } else if(tx==ex&&ty==ey&&tz==ez) { cout<<"Escaped in "< <<" minute(s)."< >n>>row>>col&&(n+row+col)) { while(!que.empty()) que.pop(); getchar(); read(n,row,col); BFS(); } return 0;}