Pages

বুধবার, ১ জানুয়ারী, ২০১৪

Solution code of uva 532-Dungeon Master


 #include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
char data[33][33][33];
int visit[33][33][33];
int L,R,C;
struct node
{
   int l,r,c;
}lis;
queue<node>grid;
int bfs()
{
     int a_x[]={0,0,-1,1,0,0};
      int a_y[]={1,-1,0,0,0,0};
      int leb[]={0,0,0,0,1,-1};
      while(!grid.empty())
      {
          lis=grid.front();grid.pop();
          int p=lis.r; int q=lis.c;int Le=lis.l;
           if(data[Le][p][q]=='E')
            return visit[Le][p][q];
          for(int i=0;i<6;i++)
          {
               int s=a_x[i]+p;
               int d=a_y[i]+q;
               int f=leb[i]+Le;
              if((s>=1 && s<=R) && (d>=1 && d<=C)&& (f>=1 && f<=L) && data[f][s][d]!='#' && visit[f][s][d]==0)
              {
                  visit[f][s][d]=1+visit[Le][p][q];
                  lis.l=f;lis.r=s,lis.c=d;grid.push(lis);
              }
          }
      }
      return -1;
}
int main()
{
   // freopen("c:\\temp\\in.txt","r",stdin);
  while(scanf("%d %d %d",&L,&R,&C)==3)
  {
      if(L==0 && R==0 && C==0)
        return 0;
        int output=-1;
        memset(visit,0,sizeof visit);
      for(int i=1;i<=L;i++)
      {

         for(int j=1;j<=R;j++)
         {
             for(int k=1;k<=C;k++)
             {
                  cin>>data[i][j][k];
             }
         }
      }
      int start=0;
       for(int i=1;i<=L && !start;i++)
      {
         for(int j=1;j<=R && !start;j++)
         {
             for(int k=1;k<=C && !start;k++)
                {
                     if(data[i][j][k]=='S')
                     {
                         visit[i][j][k]=1;
                         lis.l=i;
                         lis.r=j;
                         lis.c=k;start=1;
                         grid.push(lis);
                         output=bfs();break;

                     }
                }
         }
      }
      if(output==-1)
        printf("Trapped!\n");
      else printf("Escaped in %d minute(s).\n",output-1);
     while(!grid.empty())
        grid.pop();
  }
  return 0;
}

0 comments:

একটি মন্তব্য পোস্ট করুন