这道题目挺崩溃的。
以为用 vis 数组判断是否访问过,以及 g数组存地图。
没想到竟然会越过地图的边界(数组没越界)。蹦了。
最近做了好几道bfs 的题目。
终于对bfs 的题目有感觉了!!!
#include <iostream>
#include <queue>
#include <stdio.h>
#include <memory.h>
using namespace std;
char g[40][40][40];
int vis[40][40][40];
int l,r,c;
struct node
{
int x,y,z;
int step;
};
int dir[6][3]={ {1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1} };
int sx,sy,sz;
void bfs()
{
memset(vis,0,sizeof(vis));
queue<node > q;
node cur;
vis[sx][sy][sz]=1;
cur.x=sx;
cur.y=sy;
cur.z=sz;
cur.step=0;
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
if(g[cur.x][cur.y][cur.z]=='E')
{
cout<<"Escaped in "<<cur.step<<" minute(s)."<<endl;
return;
}
node next;
for(int i=0;i<6;i++)
{
next.x=cur.x+dir[i][0];
next.y=cur.y+dir[i][1];
next.z=cur.z+dir[i][2];
if(next.x>l||next.y>r||next.z>c)
continue;
if(next.x<1||next.y<1||next.z<1)
continue;
if(!vis[next.x][next.y][next.z]&&g[next.x][next.y][next.z]!='#')
{
vis[next.x][next.y][next.z]=1;
next.step=cur.step+1;
q.push(next);
}
}
// cout<<cur.x<<" "<<cur.y<<" "<<cur.z<<endl;
}
cout<<"Trapped!"<<endl;
}
int main()
{
while(cin>>l>>r>>c)
{
if(l==0&&r==0&&c==0) break;
for(int i=1;i<=l;i++)
{
for(int j=1;j<=r;j++)
{
for(int k=1;k<=c;k++)
{
cin>>g[i][j][k];
if(g[i][j][k]=='S')
{
sx=i;
sy=j;
sz=k;
}
}
}
}
bfs();
}
}