首页 > 其他 > 详细

ybt1215 迷宫

时间:2020-02-15 14:26:02      阅读:54      评论:0      收藏:0      [点我收藏+]

ybt1215 迷宫

【题目描述】

一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。

【输入】

第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 ≤ n ≤ 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。

【输出】

k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。

【输入样例】

2 3
.##
..#
#..
0 0 2 2
5
.....
###.#
..#..
###..
...#.
0 0 4 0 

【输出样例】

YES
NO

【题解】

这道题的思路是从起点开始分别向四个方向深搜,到最后就可以搜到所有能联通的点。只要搜到的点是终点,那么就输出“YES”,否则,将所有能到达的点都搜过一遍还是没有找到,输出“NO”。

#include<iostream>
#include<cstring>
using namespace std;
int xr[4] = { 0,1,0,-1 };
int yr[4] = { -1,0,1,0 };//操作记录
int x_1, x_2, y_1, y_2, T, n;
char a;
bool vsd[100][100], flag;
void dfs(int x, int y) {//深搜
    if (flag) {
        return;
    }
    if ((x < 0) || (y < 0)) {
        return;
    }
    if ((x >= n) || (y >= n)) {
        return;
    }
    if (vsd[x][y]) {
        return;
    }
    vsd[x][y] = 1;
    if ((x == x_2) && (y == y_2)) {
        cout << "YES" << endl;
        flag = true;//打标记
        return;
    }
    for (int i = 0; i < 4; i++) {
            dfs(x + xr[i], y + yr[i]);
    }
    return;
}
int main() {
    cin >> T;
    for (int o = 1; o <= T; o++) {//多组数据
        memset(vsd, false, sizeof(vsd));//清空数组
        flag = false;//初始化flag
        cin >> n;//输入矩阵大小
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cin >> a;
                if (a == '#') {
                    vsd[i][j] = 1;//禁止通行可以用已访问到等效代替
                }
            }
        }
        cin >> x_1 >> y_1 >> x_2 >> y_2;
        if (vsd[x_1][y_1] || vsd[x_2][y_2]) {//特判起点或终点是“#”的时候
            cout << "NO" << endl;
            continue;
        }
        else {//从x_1,y_1的位置开始搜
            dfs(x_1, y_1);
        }
        if (!flag) {//到最后也没有连通
            cout << "NO" << endl;
        }
    }
    return 0;
}

ybt1215 迷宫

原文:https://www.cnblogs.com/Wild-Donkey/p/12311416.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!