Dungeon Master (bfs 1A,贴出来纪念一下)

#include <stdio.h>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
structloc
{
    int row,col,lev,time;
};
char maze[40][40][40];
int dir[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}},vis[40][40][40];
loc sta,end;
int main()
{
    int L,R,C,i,j,k,fine,R0,C0,L0,Re,Ce,Le,R1,C1,L1,time;
    while(scanf("%d%d%d",&L,&R,&C)!=EOF)
    {
        if (L==0 && R==0 && C==0)
            break;
        fine=0;
        memset(vis,0,sizeof(vis));
        for (k=0;k<L;k++)
           {
                for (i=0;i<R;i++)
                {
                   scanf("%s",maze[k][i]);
                   for (j=0;j<C;j++)
                   {
                        if (maze[k][i][j]=='S')
                        {R0=i;C0=j;L0=k;}
                        if (maze[k][i][j]=='E')
                        {Re=i;Ce=j;Le=k;}
                   }
                }
                getchar();
           }
        queue <loc> Q;
        loc cur,next;
        cur.row=R0;
        cur.col=C0;
        cur.lev=L0;
        cur.time=0;
        Q.push(cur);
        vis[L0][R0][C0]=1;
        while(!Q.empty() && !fine)
        {
            cur=Q.front();
            Q.pop();
            if (cur.row==Re && cur.col==Ce && cur.lev==Le)
                {fine=1;break;}
            for (i=0;i<6;i++)
            {
                R1=cur.row+dir[i][0];
                C1=cur.col+dir[i][1];
                L1=cur.lev+dir[i][2];
                if(R1>=0 && R1<R && C1>=0 && C1<C && L1>=0 && L1<L && maze[L1][R1][C1]!='#' && !vis[L1][R1][C1])
                {
                    vis[L1][R1][C1]=1;
                    next.row=R1;
                    next.col=C1;
                    next.lev=L1;
                    next.time=cur.time+1;
                    Q.push(next);
                }
            }
        }
    if (fine)
    printf("Escaped in %d minute(s).\n",cur.time);
    else
    printf("Trapped!\n");
    }
    return 0;
}
posted @ 2013-11-25 16:59  单调的幸福  阅读(158)  评论(0编辑  收藏  举报