zoukankan      html  css  js  c++  java
  • POJ P2251 Dungeon Master 题解

    深搜,只不过是三维的。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 int l,r,c;
     7 int sx,sy,sz;
     8 int ex,ey,ez;
     9 int ans=99999;
    10 char map[41][41][41];
    11 int book[41][41][41]= {0};
    12 int flag=0;
    13 void dfs(int x,int y,int z,int step) {
    14     if(x==ex&&y==ey&&z==ez) {
    15         ans=min(ans,step);
    16         flag=1;
    17         return;
    18     }
    19     if(map[x+1][y][z]!='#'&&book[x+1][y][z]!=1&&x+1<=l) {
    20         book[x+1][y][z]=1;
    21         dfs(x+1,y,z,step+1);
    22         book[x+1][y][z]=0;
    23     }
    24     if(map[x-1][y][z]!='#'&&book[x-1][y][z]!=1&&x-1>=1) {
    25         book[x-1][y][z]=1;
    26         dfs(x-1,y,z,step+1);
    27         book[x-1][y][z]=0;
    28     }
    29     if(map[x][y+1][z]!='#'&&book[x][y+1][z]!=1&&y+1<=r) {
    30         book[x][y+1][z]=1;
    31         dfs(x,y+1,z,step+1);
    32         book[x][y+1][z]=0;
    33     }
    34     if(map[x][y-1][z]!='#'&&book[x][y-1][z]!=1&&y-1>=1) {
    35         book[x][y-1][z]=1;
    36         dfs(x,y-1,z,step+1);
    37         book[x][y-1][z]=0;
    38     }
    39     if(map[x][y][z+1]!='#'&&book[x][y][z+1]!=1&&z+1<=c) {
    40         book[x][y][z+1]=1;
    41         dfs(x,y,z+1,step+1);
    42         book[x][y][z+1]=0;
    43     }
    44     if(map[x][y][z-1]!='#'&&book[x][y][z-1]!=1&&z-1>=1) {
    45         book[x][y][z-1]=1;
    46         dfs(x,y,z-1,step+1);
    47         book[x][y][z-1]=0;
    48     }
    49 }
    50 int main() {
    51     while((cin>>l>>r>>c)&&l!=0&&r!=0&&c!=0) {
    52         for(int i=1; i<=l; i++) {
    53             for(int j=1; j<=r; j++) {
    54                 for(int k=1; k<=c; k++) {
    55                     cin>>map[i][j][k];
    56                     if(map[i][j][k]=='S') {
    57                         sx=i;
    58                         sy=j;
    59                         sz=k;
    60                         book[i][j][k]=1;
    61                     }
    62                     if(map[i][j][k]=='E') {
    63                         ex=i;
    64                         ey=j;
    65                         ez=k;
    66                     }
    67                 }
    68             }
    69         }
    70         dfs(sx,sy,sz,0);
    71         if(flag==0) {
    72             cout<<"Trapped!"<<endl;
    73         }
    74         else
    75         {
    76             cout<<"Escaped in "<<ans<<" minute(s)."<<endl;
    77         }
    78         memset(book,0,sizeof(book));
    79         flag=0;
    80         ans=99999;
    81     }
    82 }
    请各位大佬斧正(反正我不认识斧正是什么意思)
  • 相关阅读:
    unity基础开发----Unity获取PC,Ios系统的mac地址等信息
    Web UI设计师需要了解的用栅格化系统指导网页设计
    设计网页,常见的宽度是多少像素?
    C#常用类库简介(二)
    将本地代码上传到gitLab
    删除git 分支
    git 新建分支
    将子分支代码merge到主分支master分支
    dev分支代码覆盖master分支代码
    使用flex的同时设置超出喜爱是省略号,
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11237416.html
Copyright © 2011-2022 走看看