题目链接: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();
    }
}

谢谢浏览哈!