• 1215 迷宫


    1215 迷宫

     搜索板子

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

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

    输入描述 Input Description

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

    输出描述 Output Description

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

    样例输入 Sample Input
    1 
    7
    s...##.
    .#.....
    .......
    ..#....
    ..#...#
    ###...#
    ......e
    样例输出 Sample Output
    YES
    数据范围及提示 Data Size & Hint
     

    分类标签 Tags 

    bfs

    #include<cstdio>
    #include<iostream>
    using namespace std;
    char map[22][22];int t,n;
    void bfs(int i,int j){
        if(map[i+1][j]=='.'){
           map[i+1][j]='#';
           bfs(i+1,j);
        }
        if(map[i][j+1]=='.'){
           map[i][j+1]='#';
           bfs(i,j+1);
        }
        if(map[i-1][j]=='.'){
           map[i-1][j]='#';
           bfs(i-1,j);
        }
        if(map[i][j-1]=='.'){
           map[i][j-1]='#';
           bfs(i+1,j);
        }
        return ;
    }
    int main(){
        //ios::sync_with_stdio(false);
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    cin>>map[i][j];
            map[n][n]='.';
            bfs(1,1);
            printf("%s
    ",map[n][n]=='#'?"YES":"NO");
        }
        return 0;
    }

     dfs

    #include<cstdio>
    char a[1001][1001];
    int dx[5]={0,0,0,-1,1},vis[1001][1001];
    int dy[5]={0,-1,1,0,0};int n,t,ans=0;
    void dfs(int i,int j)
    {
        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+dx[x],j+dy[x]);
    }
    int main()
    {
       scanf("%d",&t);
       while(t--){
           scanf("%d
    ",&n);
           for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++){
                 if(j<n)
                    scanf("%c",&a[i][j]);
                 else 
                    scanf("%c
    ",&a[i][j]);
           }
           dfs(1,1);
           if(!ans)printf("NO");
           printf("
    ");
       }
       return 0;
    }
  • 相关阅读:
    页面检测网络外网连接- 网页基础模块(JavaScript)
    sql server替换字段中的某个字符
    关于Linux下 fork() 函数的总结
    郁闷的一天
    关于 Linux 下的线程函数未定义问题
    英文书籍
    学会阅读外文资料
    内存池设计(五)
    内存池设计(四)
    内存池设计(三)
  • 原文地址:https://www.cnblogs.com/shenben/p/5517901.html
Copyright © 2020-2023  润新知