dvc++c语言迷宫寻路
时间: 2024-01-10 07:52:41 浏览: 105
以下是一个简单的迷宫寻路程序的 C++ 实现,使用了深度优先搜索算法(DFS):
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100; // 最大迷宫大小
const int dx[4] = {0, 1, 0, -1}; // 四个方向
const int dy[4] = {1, 0, -1, 0};
int n, m; // 迷宫大小
char maze[MAXN][MAXN]; // 迷宫
bool visited[MAXN][MAXN]; // 记录是否访问过
// 判断是否在迷宫内
bool in_maze(int x, int y) {
return x >= 0 && x < n && y >= 0 && y < m;
}
// DFS 寻路
bool dfs(int x, int y, vector<pair<int, int>>& path) {
visited[x][y] = true;
path.push_back({x, y});
if (maze[x][y] == 'G') { // 找到出口
return true;
}
for (int i = 0; i < 4; i++) { // 四个方向尝试
int nx = x + dx[i], ny = y + dy[i];
if (in_maze(nx, ny) && maze[nx][ny] != '#' && !visited[nx][ny]) {
if (dfs(nx, ny, path)) {
return true;
}
}
}
path.pop_back(); // 回溯
return false;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> maze[i][j];
}
}
vector<pair<int, int>> path; // 记录路径
bool found = false;
for (int i = 0; i < n; i++) { // 从起点开始搜索
for (int j = 0; j < m; j++) {
if (maze[i][j] == 'S') {
found = dfs(i, j, path);
break;
}
}
if (found) {
break;
}
}
if (found) { // 输出路径
cout << "Path:" << endl;
for (auto& p : path) {
cout << "(" << p.first << ", " << p.second << ")" << endl;
}
} else {
cout << "No path found!" << endl;
}
return 0;
}
```
输入格式为:
```
n m
maze[0][0] maze[0][1] ... maze[0][m-1]
maze[1][0] maze[1][1] ... maze[1][m-1]
...
maze[n-1][0] maze[n-1][1] ... maze[n-1][m-1]
```
其中,`n` 和 `m` 分别为迷宫的行数和列数,`maze[i][j]` 表示第 `i` 行第 `j` 列的迷宫格子,`S` 表示起点,`G` 表示出口,`#` 表示障碍物。输出格式为找到的路径上所有点的坐标。
阅读全文