zoukankan      html  css  js  c++  java
  • 三维BFS Poj 2251

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <fstream>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <map>
    #include <set>
    #include <iomanip>
    
    using namespace std;
    #define maxn 205
    
    int d[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    typedef struct point
    {
        int x,y,z;
        int ans;
    }point;
    
    point p[maxn];
    int Map[33][33][33];
    bool used[maxn][maxn][maxn];
    
    int x1,x2,y2,z1,z2;
    int you;//这里原本是想用y1的,但是在cmath这个函数中y1(y0,yn等)有自己的定义,发生了冲突(如果将cmath删掉,就可以定义了)
    int BFS(int l,int n,int m)
    {
        int ii,jj,zz;
        int i;
        queue<point>q;
        point temp1,temp2;
        temp1.x=x1;
        temp1.y=you;
        temp1.z=z1;
        temp1.ans=0;
        q.push(temp1);
        memset(used, false, sizeof(used));
               used[z1][x1][you]=true;
               while(!q.empty()){
                   temp1=q.front();
                   q.pop();
                   for(i=0;i<6;i++)
                   {
                       ii=temp1.x+d[i][0];
                       jj=temp1.y+d[i][1];
                       zz=temp1.z+d[i][2];
                       if(ii==x2 && jj==y2 && zz==z2)
                       {
                           return temp1.ans+1;
                       }
                       if(zz>=0 && zz<l && ii>=0 && ii<n && jj>=0 && jj<m && Map[zz][ii][jj]==1 && used[zz][ii][jj]==false)
                       {
                           used[zz][ii][jj]=true;
                           temp2.x=ii;
                           temp2.y=jj;
                           temp2.z=zz;
                           temp2.ans=temp1.ans+1;
                           q.push(temp2);
                       }
               }
                   
         }
        return -1;
    }
    int main()
    {
            int l,m,n,i,j,k,key;
            char str[40];
            while(cin>>l>>n>>m){
                if(l==0&&n==0&&m==0){
                    break;
                }
                memset(Map, 0, sizeof(Map));
                for(k=0;k<l;k++){
                    for(i=0;i<n;i++){
                        scanf("%s",str);
                        for(j=0;j<m;j++){
                            if(str[j]=='#')
                                Map[k][i][j]=0;
                            else if(str[j]=='.')
                            {
                                Map[k][i][j]=1;
                            }
                            else if(str[j]=='S')
                            {
                                z1=k;
                                x1=i;
                                you=j;
                            }
                            else
                            {
                                z2=k;
                                x2=i;
                                y2=j;
                            }
                        }
                    }
                }
                key=BFS(l,n,m);
                if(key==-1)
                    cout<<"Trapped!"<<endl;
                else
                    printf("Escaped in %d minute(s).
    ",key);
            }
            return 0;
    }
  • 相关阅读:
    设计模式之开篇(C#语法) 爱拼才会赢
    C#语法糖之第一篇:自动属性&隐式类型 爱拼才会赢
    C#语法糖之第四篇: 扩展方法 爱拼才会赢
    C#中this在扩展方法的应用
    笔记20120215_转义字符_运算符
    Linux基本操作
    SQL创表
    软件测试的概念
    java 线程池
    Redis广播
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9454710.html
Copyright © 2011-2022 走看看