• 2018年东北农业大学春季校赛 D wyh的迷宫【搜索】


    链接:https://www.nowcoder.com/acm/contest/93/D
    来源:牛客网

    题目描述

    给你一个n*m的迷宫,这个迷宫中有以下几个标识:

    s代表起点

    t代表终点

    x代表障碍物

    .代表空地

    现在你们涵哥想知道能不能从起点走到终点不碰到障碍物(只能上下左右进行移动,并且不能移动到已经移动过的点)。

    输入描述:

    输入第一行一个整数T(1<=T<=10)
    接下来有T组测试数据,对于每一组测试数据,第一行输入2个数n和m(1<=n,m<=500)
    接下来n行,每行m个字符代表这个迷宫,每个字符都是上面4个中的一种
    数据保证只有一个起点和一个终点

    输出描述:

    对于每一组测试数据,如果可以的话输出YES,不可以的话输出NO
    示例1

    输入

    1
    3 5
    s...x
    x...x
    ...tx

    输出

    YES
    【分析】:判断地图可达性。可以DFS搜索看是否可以到达终点,某点a[x][y] == 't'(终点) or v[ex][ey]==1(终点坐标) 就说明可以,输出YES
    【代码】:
    #include<bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    #define N 550
    
    int t;
    char a[N][N];
    int dx[] = {1, 0, -1, 0};
    int dy[] = {0, -1, 0, 1};
    int v[N][N];
    int f;
    int n, m;
    
    int ok(int tx, int ty)
    {
        if(tx>=0 && tx<n && ty>=0 && ty<m && a[tx][ty]!='x' && v[tx][ty] == 0)
            return 1;
        else return 0;
    }
    
    void dfs(int x, int y)
    {
        v[x][y] = 1;
        if(a[x][y] == 't'){
            f = 1;
            return ;
        }
        for(int i=0; i<4; i++){
            int x1 = x + dx[i];
            int y1 = y + dy[i];
            if(ok(x1,y1))
                dfs(x1,y1);
        }
    
    }
    
    int main()
    {
        int t, sx, sy;
        scanf("%d", &t);
        while(t--) {
            f = 0;
            scanf("%d %d", &n, &m);
            memset(v, 0, sizeof(v));
    
            for(int i = 0; i < n; i++) {
                scanf("%s", a[i]);
            }
    
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < m; j++) {
                    if(a[i][j] == 's') {
                        sx = i;
                        sy = j;
                        break;
                    }
                }
            }
            dfs(sx, sy);
            if(f == 1)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
    /*
    1
    3 5
    s...x
    x...x
    ...tx
    */
    dfs
  • 相关阅读:
    装饰器wraps
    装饰器的语法糖
    VisionPro 自学帮助
    准备重新编译VisionPro 官方版本 使用 vs2019
    个人随笔_学习感悟
    VisionPro 一些图操作
    System.Data.Sqlite.dll 使用异常问题参考
    NOPI笔记01
    VisionPro帮助文档学习01(UserGuide DisPlay)
    MSSqlServer基础学习01
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8724843.html
Copyright © 2020-2023  润新知