3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Escaped in 11 minute(s). Trapped!
还是感觉广搜比深搜简单点
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> #define MAX 35 using namespace std; int n,m,k; int x1,x2,y1,y2,z1,z2; char map[MAX][MAX][MAX]; int vis[MAX][MAX][MAX]; struct node { int x,y,z,step; friend bool operator < (node a,node b) { return a.step>b.step; } }; void bfs() { int i,j; int move[6][3]={0,0,1,0,0,-1,0,1,0,0,-1,0,1,0,0,-1,0,0}; priority_queue<node>q; node beg,end; beg.x=x1; beg.y=y1; beg.z=z1; beg.step=0; q.push(beg); vis[x1][y1][z1]=1; while(!q.empty()) { end=q.top(); q.pop(); if(end.x==x2&&end.y==y2&&end.z==z2) { printf("Escaped in %d minute(s).\n",end.step); return ; } for(i=0;i<6;i++) { beg.x=end.x+move[i][0]; beg.y=end.y+move[i][1]; beg.z=end.z+move[i][2]; if(!vis[beg.x][beg.y][beg.z]&&0<=beg.x&&beg.x<n&&0<=beg.y&&beg.y<m&&beg.z>=0&&beg.z<k&&map[beg.x][beg.y][beg.z]!='#') { map[beg.x][beg.y][beg.z]='#'; beg.step=end.step+1; q.push(beg); } } } printf("Trapped!\n"); } int main() { int i,j,t,s; while(scanf("%d%d%d",&n,&m,&k)&&n!=0&&m!=0&&k!=0) { for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%s",map[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<m;j++) { for(t=0;t<k;t++) { if(map[i][j][t]=='S') { x1=i;y1=j;z1=t; } if(map[i][j][t]=='E') { x2=i;y2=j;z2=t; } } } } memset(vis,0,sizeof(vis)); bfs(); } return 0; }