ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NC15434 wyh的迷宫

2022-07-15 22:33:47  阅读:183  来源: 互联网

标签:return int 迷宫 yy vis xx NC15434 dt wyh


题目链接

题目

题目描述

给你一个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,BFS。

这道题两种搜索都能写,但dfs会好一点,因为bfs是所有路径都推到最后一步才出结果,不适合可行性的题,但如果地图太大的话,还是用bfs。

时间复杂度 \(O(?)\)

空间复杂度 \(O(mn)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

int n, m;
char dt[507][507];
bool vis[507][507];
const int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };

bool dfs(int x, int y) {
    if (dt[x][y] == 't') return true;
    for (int i = 0;i < 4;i++) {
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if (xx < 0 || xx >= n || yy < 0 || yy >= m || vis[xx][yy] || dt[xx][yy] == 'x') continue;
        vis[xx][yy] = 1;
        if (dfs(xx, yy)) return true;
    }
    return false;

}

bool solve() {
    memset(vis, 0, sizeof(vis));
    cin >> n >> m;
    int sx, sy;
    for (int i = 0;i < n;i++) {
        for (int j = 0;j < m;j++) {
            cin >> dt[i][j];
            if (dt[i][j] == 's')
                sx = i, sy = j;
        }
    }
    vis[sx][sy] = 1;
    if (dfs(sx, sy))return true;
    return false;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << "NO" << '\n';
        else cout << "YES" << '\n';
    }
    return 0;
}

标签:return,int,迷宫,yy,vis,xx,NC15434,dt,wyh
来源: https://www.cnblogs.com/BlankYang/p/16482971.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有