zoukankan      html  css  js  c++  java
  • codevs 1215 迷宫

    在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。

    输入的第一行为一个整数m,表示迷宫的数量。  其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。

    输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。

    1  7  s...##.  .#.....  .......  ..#....  ..#...#  ###...#  ......e
    YES

    这道题灌水法即可,简单说就是DFS然后向四周拓展

    #include<stdio.h>
    #include<math.h>
    char a[1001][1001],ans=0;
    int directx[5]={0,0,0,-1,1},vis[1001][1001];
    int directy[5]={0,-1,1,0,0};
    void dfs(int i,int j,int n)
    {
        if(i<=0||i>n||j<=0||j>n)return ;
        if(vis[i][j]==1||a[i][j]=='#')return ;
        if(a[i][j]=='e'){ans=a[i][j];
        printf("YES");    
        }
        vis[i][j]=1;
        for(int x=1;x<=4;x++)
        dfs(i+directx[x],j+directy[x],n) ;
    }
    int main()
    {
        int b,i,z,o,j,n;
        scanf("%d",&z);
       for(o=1;o<=z;o++)
       {
           scanf("%d
    ",&n);
           for(i=1;i<=n;i++)
           for(j=1;j<=n;j++)
           {
               if(j<n)
               scanf("%c",&a[i][j]);
               else scanf("%c
    ",&a[i][j]);
           }
           dfs(1,1,n);
        if(ans==0)printf("NO");
           printf("
    ");
       }
    
          return 0;
    } 
  • 相关阅读:
    HBase 超详细介绍
    写在之前
    【CF】38E Let's Go Rolling! (dp)
    [CF] E. Camels
    CF9D How many trees? (dp)
    [CF] 8C Looking for Order
    CF dp 题(1500-2000难度)
    NOIP原题板刷
    Codeforces Round #595 (Div. 3) 题解
    CSP-S2019 停课日记
  • 原文地址:https://www.cnblogs.com/z52527/p/3889200.html
Copyright © 2011-2022 走看看