#include <iostream> #include <set> #include <vector> #include <cmath> #include <cstdio> #include <algorithm> #define ll long long const int M = 1e3 + 1; using namespace std; int flag = 0; char a[M][M];//存储图 int vis[M][M];//用来判断这个点是否跑过,如果跑过就不用遍历了 int n, m; int x1[M] = { 0,0,-1,1,0 };//四个方向 int yt[M] = { 0,1,0,0,-1 }; bool check(int x,int y) {//check函数用来判断是否超出范围 return x >= 1 && x <= n && y >= 1 && y <= m; } inline bool dfs(int x, int y) { if (a[x][y] == 'g') return 1;//如果找到直接返回1 vis[x][y]=1;//置为1表示走过啦 for (int i = 1; i <= 4; i++) { int dx, dy; dx = x1[i] + x; dy = y + yt[i]; if (a[dx][dy] != '#' && dx >= 1 && dx <= n && dy >= 1 && dy <= m&&!vis[dx][dy]) {//首先不能是障碍物,其次这个点得没跑过 if (dfs(dx, dy)) {//继续遍历,直到有1返回 return true; } } } return false; } int main() { //int n, m; cin >> n >> m; getchar(); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; } getchar(); } int x, y; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] == 's') {//表示找到了起点 x = i, y = j; } } } if (dfs(x, y)) { cout << "Yes" << endl; } else cout << "No" << endl; }