poj2251-----BFS模板题
就是在二维bfs的基础上,再添加两个方向。无他
呵呵,学了STL,用<queue>超方便啊!好爽,要继续发扬光大
AC:
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
char map[50][50][50];
int flag[50][50][50]; //0没有走过,1代表走过
int fanx[6]={1,-1,0,0,0,0};
int fany[6]={0,0,1,-1,0,0};
int fanz[6]={0,0,0,0,1,-1};
int result;
int bx,by,bz;
int sx,sy,sz;
int n,m,l; //n层, 每层 m行,l列
struct node
{
int x;
int y;
int z;
int step;
};
int bfs()
{
queue<node> qu;
node p,temp;
p.x=bx;
p.y=by;
p.z=bz;
p.step=0;
map[p.x][p.y][p.z]='#'; //表示这个点已经访问过了,以后不会再访问了
qu.push(p);
while(!qu.empty())
{
p=qu.front();
qu.pop();
if(p.x==sx&&p.y==sy&&p.z==sz)
{
//printf("到此时的步数位%d\n",p.step);
return p.step;
}
for(int i=0;i<6;i++)
{
temp.x=p.x+fanx[i];
temp.y=p.y+fany[i];
temp.z=p.z+fanz[i];
if(temp.x>=0&&temp.x<n&&temp.y>=0&&temp.y<m&&temp.z>=0&&temp.z<l&&map[temp.x][temp.y][temp.z]!='#')
{
temp.step=p.step+1;
map[temp.x][temp.y][temp.z]='#';
qu.push(temp);
}
}
}
return 0;
}
int main()
{
int i,j,k;
while(cin>>n>>m>>l&&n&&m&&l)
{
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>map[i][j];
for(k=0;k<l;k++)
{
if(map[i][j][k]=='S')
{
bx=i;
by=j;
bz=k;
}
if(map[i][j][k]=='E')
{
sx=i;
sy=j;
sz=k;
}
}
}
}
i=bfs();
//cout<<"结果是"<<i<<endl;
if(i==0)
cout<<"Trapped!"<<endl;
else
cout<<"Escaped in "<<i<<" minute(s)."<<endl;
}
return 0;
}