poj2251 Dungeon Master (bfs)

*题意:

     给定三维迷宫,能走出来就输出最短用时,走不出输出
*代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char maze[31][31][31];
bool visit[31][31][31];
int queue[28000][3];
int time[31][31][31];
int l,c,r;
int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
void bfs(int start[3],int end[3])
{
    int i,k,front=0,back=1,flag=0,temp[3],next[3];
    queue[0][0]=start[0];
    queue[0][1]=start[1];
    queue[0][2]=start[2];
    while(front<back)
    {
          temp[0]=queue[front][0];
          temp[1]=queue[front][1];
          temp[2]=queue[front++][2];
          for(i=0;i<6;i++)
          {
              next[0]=temp[0]+dir[i][0];
              next[1]=temp[1]+dir[i][1];
              next[2]=temp[2]+dir[i][2];
              if(next[0]<l&&next[1]<r&&next[2]<c&&next[0]>=0&&next[1]>=0&&next[2]>=0&&maze[next[0]][next[1]][next[2]]!='#'&&!visit[next[0]][next[1]][next[2]])
              {
                time[next[0]][next[1]][next[2]]=time[temp[0]][temp[1]][temp[2]]+1;
                visit[next[0]][next[1]][next[2]]=1;
                if(next[0]==end[0]&&next[1]==end[1]&&next[2]==end[2])
                {
                    cout<<"Escaped in "<<time[end[0]][end[1]][end[2]]<<" minute(s)."<<endl;
                    flag=1;
                    break;
                }
                else
                {
                    queue[back][0]=next[0];
                    queue[back][1]=next[1];
                    queue[back++][2]=next[2];
                }
              }
          }
          if(flag)
              break;
    }
    if(!flag)
        cout<<"Trapped!"<<endl;
}
int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    int i,j,k,start[3],end[3];
    while(cin>>l>>r>>c)
    {
        if(l==0&&r==0&&c==0)
            break;
        memset(visit,0,sizeof(visit));
        memset(time,0,sizeof(time));
        for(i=0;i<l;i++)
            for(j=0;j<r;j++)
                for(k=0;k<c;k++)
                {
                    cin>>maze[i][j][k];
                    if(maze[i][j][k]=='S')
                    {
                        start[0]=i;
                        start[1]=j;
                        start[2]=k;
                        visit[i][j][k]=1;
                    }
                    if(maze[i][j][k]=='E')
                    {
                        end[0]=i;
                        end[1]=j;
                        end[2]=k;
                    }
                }
                bfs(start,end);
    }
    return 0;
}

 

posted @ 2013-10-03 15:46  Neptunes  阅读(162)  评论(0编辑  收藏  举报