Dungeon Master POJ - 2251 bfs模板题 注意输入的时候对应的变量以及要清空队列即可

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct node
{
int x,y,z;
int step;
node(int a,int b,int c,int d)
{
x=a;
y=b;
z=c;
step=d;
}
};
queue q;
int dx[6]={1,-1,0,0,0,0};
int dy[6]={0,0,1,-1,0,0};
int dz[6]={0,0,0,0,1,-1};
int vis[31][31][31];
char map[31][31][31];
int l,r,c;
int res;
int sx,sy,sz;
int ex,ey,ez;
int ok(int x,int y,int z)
{
if(x>l||x<1)return 0;
if(y>r||y<1)return 0;
if(z>c||z<1)return 0;
if(map[x][y][z]’#’||vis[x][y][z]1)
return 0;
return 1;
}
void bfs()
{
while(!q.empty())//多组样例 每次队列要清空 切记
q.pop();
q.push(node(sx,sy,sz,0));
vis[sx][sy][sz]=1;
while(!q.empty())
{
node tt=q.front();
q.pop();
for(int i=0;i<6;i++)
{
int xx=tt.x+dx[i];
int yy=tt.y+dy[i];
int zz=tt.z+dz[i];
if(xx
ex&&yy
ey&&zzez)
{
cout<<“Escaped in “< vis[ex][ey][ez]=1;
return ;
}
if(ok(xx,yy,zz))
{
q.push(node(xx,yy,zz,tt.step+1));
vis[xx][yy][zz]=1;
}
}
}
}
int main()
{
while(cin>>l>>r>>c&&l&&r&&c)
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=l;i++)
for(int j=1;j<=r;j++)
for(int k=1;k<=c;k++)//注意顺序
{
cin>>map[i][j][k];
if(map[i][j][k]
‘S’)
{
sx=i;
sy=j;
sz=k;
}
if(map[i][j][k]==‘E’)
{
ex=i;
ey=j;
ez=k;
}
}
bfs();
if(vis[ex][ey][ez]==0) cout<<“Trapped!”< }
return 0;
}

你可能感兴趣的:(集训搜索)