自己看
2025-11-21 20:28:56
发布于:广东
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
using namespace std;
// 定义方向数组:上、下、左、右
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
int n, m; // 迷宫的行数和列数
int sx, sy, fx, fy;// 起点和终点坐标(1-based)
vector<string> maze; // 存储迷宫
vector<vector<bool>> visited; // 标记是否访问过
// DFS函数,返回从(x,y)是否能到达终点
bool dfs(int x, int y) {
// 到达终点
if (x == fx - 1 && y == fy - 1) {
return true;
}
visited[x][y] = true; // 标记当前位置已访问
// 遍历四个方向
for (int i = 0; i < 4; ++i) {
int nx = x + dx[i];
int ny = y + dy[i];
// 检查边界
if (nx >= 0 && nx < n && ny >= 0 && ny < m) {
// 检查是否是空地且未访问
if (maze[nx][ny] == '.' && !visited[nx][ny]) {
if (dfs(nx, ny)) {
return true;
}
}
}
}
return false; // 所有方向都尝试过,无法到达终点
}
int main() {
// 输入迷宫尺寸
cin >> n >> m;
// 输入起点和终点坐标
cin >> sx >> sy >> fx >> fy;
// 输入迷宫
maze.resize(n);
for (int i = 0; i < n; ++i) {
cin >> maze[i];
}
// 初始化访问标记数组
visited.resize(n, vector<bool>(m, false));
// 从起点开始DFS(转换为0-based索引)
if (dfs(sx - 1, sy - 1)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
这里空空如也




有帮助,赞一个