zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3350290.html
Copyright © 2011-2022 走看看