POJ 2251 Dungeon Master BFS

题目链接:http://poj.org/problem?id=2251

这道题坑爹的地方在于。。。我很悲剧的一个变量写错了~
 
 
View Code
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char map[35][35][35];
int pro[35][35][35];
int fro,re;
struct node
{
    int l,r,c,step;
}q[100005],v;
int main()
{
    int r,l,c,i,j,k,leap,ii,jj,num;
    while(scanf("%d %d %d",&l,&r,&c)&& l||r||c)
    {
        leap = 1;

        memset(map,0,sizeof(map));
        memset(pro,0,sizeof(pro));
        for(i = 0;i < l;i++)
        {
            getchar();
            for(j = 0;j < r;j++)
            gets(map[i][j]);
        }

        for(i = 0;i < l;i++)
        {
            for(j = 0;j < r;j++)
            {
                for(k = 0;k < c;k++)
                if(map[i][j][k] == 'S')
                {
                    leap = 0;
                    break;
                }
                if(!leap)
                break;
            }
            if(!leap)
            break;
        }
        fro = 0;
        re = 0;
        q[re].l = i;
        q[re].r = j;
        q[re].c = k;
        q[re].step = 0;
        re++;
        pro[i][j][k] = 1;
        leap =1;

        while(fro < re)
        {
            v = q[fro];
            num = v.step;
            fro++;
            for(j = 0;j < 6;j++)
            {
                if(j == 0)
                ii = v.l+1,jj = v.r,k = v.c;
                if(j == 1)
                ii = v.l-1,jj = v.r,k = v.c;
                if(j == 2)
                ii = v.l,jj = v.r+1,k = v.c;
                if(j == 3)
                ii = v.l,jj = v.r-1,k = v.c;
                if(j == 4)
                ii = v.l,jj = v.r,k = v.c+1;
                if(j == 5)
                ii = v.l,jj = v.r,k = v.c-1;
                if(ii >= 0&&jj >= 0 && k >= 0 &&ii < l&&jj < r && k < c)
                {
                    if(map[ii][jj][k] != '#' && pro[ii][jj][k] != 1)
                    {
                        q[re].l = ii;
                        q[re].r = jj;
                        q[re].c = k;
                        q[re].step = num+1;
                        if(map[ii][jj][k] == 'E')
                        {
                            leap = 0;
                            break;
                        }
                        pro[ii][jj][k] = 1;
                        re++;
                    }
                }

            }
            if(!leap)
                break;
        }
        if(!leap)
        printf("Escaped in %d minute(s).\n",q[re].step);
        else
        puts("Trapped!");
    }
    return 0;
}
posted @ 2012-07-31 17:12  某某。  阅读(123)  评论(0编辑  收藏  举报