走出迷宫

走出迷宫

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 江苏

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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