#include <iostream> using namespace std; int n; int maze[101][101]; // 迷宫地图 bool visited[101][101]; // 访问标记 int ha, la, hb, lb; bool found = false; // 四个移动方向:上、右、下、左 int dx[4] = {-1, 0, 1, 0}; int dy[4] = {0, 1, 0, -1}; void dfs(int x, int y) { // 如果已经找到路径或者越界或者是墙或已访问,则返回 if (found || x < 1 || x > n || y < 1 || y > n || maze[x][y] == 1 || visited[x][y]) { return; } // 到达终点 if (x == hb && y == lb) { found = true; return; } // 标记为已访问 visited[x][y] = true; // 尝试四个方向 for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; dfs(nx, ny); } } int main() { cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> maze[i][j]; } } cin >> ha >> la >> hb >> lb; // 检查起点或终点是否为墙 if (maze[ha][la] == 1 || maze[hb][lb] == 1) { cout << "NO"; return 0; } // 特殊情况:起点就是终点 if (ha == hb && la == lb) { cout << "YES"; return 0; } dfs(ha, la); cout << (found ? "YES" : "NO"); return 0; } /************************************************************** Problem: 1430 User: zhengzihao Language: C++ Result: Accepted Time:27 ms Memory:2124 kb ****************************************************************/