分析
- 需要注意一点:如果起始位置位于障碍物上则无法到达
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int n;
char g[N][N];
bool st[N][N];
int xa, ya, xb, yb;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
bool dfs(int x, int y) {
if (g[x][y] == '#') return false; // 起点可能就在障碍物上
if (x == xb && y == yb) return true;
st[x][y] = true;
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a >= 0 && a < n && b >= 0 && b < n && !st[a][b] && g[a][b] != '#') {
if (dfs(a, b)) return true;
}
}
return false;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%s", g[i]);
scanf("%d%d%d%d", &xa, &ya, &xb, &yb);
memset(st, 0, sizeof st);
if (dfs(xa, ya)) puts("YES");
else puts("NO");
}
return 0;
}