temp save

#include<iostream>
#include<cstring>
using namespace std;
char a[35][35][35];
int visited[35][35][35];
int l,r,c;
int flag;
int num;
int temp;
int f[3][6]= {{1,-1,0,0,0,0},{0,0,1,-1,0,0},{0,0,0,0,1,-1}};
bool judge(int s1,int s2,int s3)
{
    int t=0;
    for(int i=0; i<6; i++)
    {
        int xi=s1+f[0][i];
        int yi=s2+f[1][i];
        int zi=s3+f[2][i];
        if(xi>=1&&xi<=l&&yi>=1&&yi<=r&&zi>=1&&zi<=c&&(a[xi][yi][zi]=='.'))
            return  true;
    }
    return false;
}
void dfs(int t1,int t2,int t3)
{
temp++;
    if(a[t1][t2][t3]=='E'&&temp<num)
    {
        flag=1;
        num=temp+1;
        return ;
    }
    for(int i=t1; i<=l; i++)
    {
        for(int j=t2; j<=r; j++)
        {
            for(int k=t3; k<=c; k++)
            {
                if(visited[i][j][k]==0&&a[i][j][k]!='#'&&judge(i,j,k))
                {
                    visited[i][j][k]=1;
                    dfs(i,j,k);
                    visited[i][j][k]=0;
                }
            }
        }
    }
}
int main()
{
    while(cin>>l>>r>>c)
    {
        if(l==0&&r==0&&c==0)break;
        memset(visited,0,sizeof(visited));
        temp=0;
        num=0x3f3f3f3f;
        flag=0;
        int t1,t2,t3;
        for(int i=1; i<=l; i++)
        {
            for(int j=1; j<=r; j++)
            {
                for(int k=1; k<=c; k++)
                {
                    cin>>a[i][j][k];
                    if(a[i][j][k]=='S')
                    {
                        t1=i;
                        t2=j;
                        t3=k;
                    }
                }
            }
        }
        dfs(t1,t2,t3);
        if(flag==0)
            cout<<"Trapped!"<<endl;
        else
            cout<<"Escaped in "<<num<<" minute(s)."<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/let_life_stop/article/details/80542046
今日推荐