走出迷宫

走出迷宫

https://ac.nowcoder.com/acm/problem/14572

题目链接:https://ac.nowcoder.com/acm/problem/14572
分析:很简单的dfs题目,当然也可以用bfs题,对于这类题是都行得通的,因为只要能走到终点就行。下面给出的是dfs的做法,“无脑走全图”。
细节和终点看代码和注释吧!

#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
#define ll long long
using namespace std;
#define close_stdin  ios::sync_with_stdio(false)
int n, m;
char mp[505][505],c;
bool vis[505][505];
int dirx[4] = { 0,0,1,-1 }, diry[4] = { 1,-1,0,0 };
int sx, sy,flag=0;
void my_input() {  //将地图输入 ,并记录下起点的位置
    for (int i = 1;i <= n;i++) {
        for (int j = 1;j <= m;j++) {
            cin >> c;
            mp[i][j] = c;
            if (c == 'S') { sx = i;sy = j; }
        }
    }
}
void dfs(int x, int y) {
    vis[x][y] = 1; //标记走过的位置
    for (int w = 0;w < 4;w++) {
        int nx = x + dirx[w];//下一个位置
        int ny = y + diry[w];
        if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && mp[nx][ny] != '#') { //判断下一个位置能否走
            if (mp[nx][ny] == 'E') { flag = 1;return; }//是终点 ,说明能走到,标志为1
            else dfs(nx, ny);  //不是终点且可行,再往下探索
        }
    }
}
void solve() {
    memset(vis, 0, sizeof(vis)); //因为多组数据,所以每组数据处理前要将状态数组全部清0;
    flag=0; //能否走到终点的标志
    dfs(sx, sy);//从起点开始走
    cout << (flag ? "Yes\n" : "No\n");
}
int main() {
    close_stdin;//只是为了让cin和printf一样快
    while (cin >> n >> m) {
        my_input();
        solve();
    }
}

谢谢浏览哈!

全部评论
谢谢博主
点赞 回复 分享
发布于 2023-09-22 22:03 江苏

相关推荐

珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务