• HDOJ-1010 Tempter of the Bone(dfs)


     Description:

    探险者在一个古老的迷宫中发现了一个珠宝,,当他捡起它时,迷宫开始摇晃,探险者可以感觉到地面下沉。他意识到珠宝是一个陷阱,他拼命试图摆脱这个迷宫。

    迷宫是一个矩形,大小为N×M。迷宫中有一扇门。刚开始时,门是关闭的,他将在第T秒打开一小段时间(少于1秒)。因此,他必须在第T秒精确到达门。每秒钟,他可以将一个块移动到上,下,左和右相邻的块之一。一旦他进入一个砖块,该砖块的地面将开始下沉并在下一秒消失。他不能在一个砖块停留超过一秒钟,也不能搬到一个拜访的砖块。

    输入:
    4 4 5
    S.X.
    ..X.
    ..XD
    ....
    3 4 5
    S.X.
    ..X.
    ...D
    0 0 0
    输出:
    NO
    YES
    

     简单DFS模板题,个人建议用cin输入,代码如下:

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    #include<conio.h>
    using namespace std;
    
    char map[20][20];
    int data[20][20]= {99999};
    int t;
    bool num;
    void visit(int n,int m,int cot,int x,int y,int t)
    {
      if(cot > t)
        return ;
      else if(cot == t && data[n][m] == 4)
       {
        num = true;
        return;
       }
      else if(data[n][m]==1||data[n][m]==2)
      {
              data[n][m] = 3;
              if(m+1<y&&(data[n][m+1]==2||data[n][m+1]==4)) visit(n,m+1,cot+1,x,y,t);
              if(m-1>=0&&(data[n][m-1]==2||data[n][m-1]==4)) visit(n,m-1,cot+1,x,y,t);
              if(n+1<x&&(data[n+1][m]==2||data[n+1][m]==4)) visit(n+1,m,cot+1,x,y,t);
              if(n-1>=0&&(data[n-1][m]==2||data[n-1][m]==4)) visit(n-1,m,cot+1,x,y,t);
              data[n][m] = 2;
      }
    }
    
    int main()
    {
        int n,m,t;
        while((cin>>n>>m>>t)&&(n!=0&&m!=0&&t!=0))
        {
            int x1;
            int y1;
            num = false;
            memset(data,99999,sizeof(data));
            memset(map,'0',sizeof(map));
            for(int i=0 ;i<n; i++)
            {
    
                for(int j=0 ;j< m; j++)
                {
                 cin>>map[i][j];
                // printf("%d %d
    ",i,j);
                 if(map[i][j] == 'S')
                {
                    x1 = i;
                    y1 =j;
                    data[i][j] = 1;
                }
                  else if(map[i][j]=='.')
                  {
                      data[i][j]=2;
                  }
                  else if(map[i][j]=='X')
                  {
                      data[i][j] = 3;
                  }
                  else if(map[i][j] =='D')
                    data[i][j] = 4;
                }
            }
            visit(x1,y1,0,n,m,t);
            if(num)
                printf("YES
    ");
            else printf("NO
    ");
        }
    }
  • 相关阅读:
    snabbdom源码(二)
    linux汇总 文本操作三篇之grep
    snabbdom源码(一)
    linux汇总 文本操作三篇之sed
    你的c语言中文版项目使用 char 还是 wchar_t?
    实习经验谈
    fastdfs 安装和使用
    redison 自动续期的 分布式锁
    vue3 中的axios的使用,使用Vue.prototype 报错问题
    vue3的 keepalive 使用,以及activated钩子 和 vuerouter中的 scrollBehavior的使用
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/13583522.html
Copyright © 2020-2023  润新知