请c++编写一个迷宫游戏代码并解释运行原理
时间: 2024-02-25 18:54:58 浏览: 68
好的,下面是一个简单的迷宫游戏 C++ 代码示例,实现了基本的移动和寻找出口功能:
```
#include <iostream>
#include <vector>
using namespace std;
// 迷宫大小
const int N = 5;
// 迷宫地图
vector<vector<int>> maze = {
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 1},
{0, 1, 1, 0, 0},
{0, 0, 0, 1, 0},
};
// 标记访问过的位置
vector<vector<bool>> visited(N, vector<bool>(N, false));
// 上下左右四个方向的移动
const int dx[] = {0, 0, -1, 1};
const int dy[] = {-1, 1, 0, 0};
// 搜索函数,返回是否找到出口
bool dfs(int x, int y) {
if (x < 0 || x >= N || y < 0 || y >= N) return false; // 越界
if (maze[x][y] == 1 || visited[x][y]) return false; // 障碍或已访问过
if (x == N - 1 && y == N - 1) return true; // 找到出口
visited[x][y] = true; // 标记为已访问
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i]; // 移动到相邻位置
if (dfs(nx, ny)) return true; // 搜索成功,直接返回
}
return false; // 没有找到出口
}
int main() {
if (dfs(0, 0)) {
cout << "找到了出口" << endl;
} else {
cout << "没有找到出口" << endl;
}
return 0;
}
```
代码的大致思路是使用深度优先搜索遍历迷宫,用二维数组 `maze` 表示迷宫地图,其中 0 表示空地,1 表示障碍物。用二维数组 `visited` 标记哪些位置已经访问过。
搜索函数 `dfs` 的参数是当前位置的坐标 `(x, y)`,每次搜索时,先检查是否越界、是否是障碍或已访问过的位置,然后标记为已访问,再尝试向上下左右四个方向移动,如果移动成功并找到出口,则直接返回 true,否则继续尝试其他方向。
在 `main` 函数中,调用 `dfs` 函数从起点开始搜索,如果搜索成功(即找到了出口),输出提示信息,否则输出另一种提示信息。
运行原理是通过深度优先搜索遍历迷宫,从起点开始,尝试向上下左右四个方向移动,如果移动成功并找到出口,则直接返回 true,否则继续尝试其他方向。在搜索过程中,使用 `visited` 数组标记哪些位置已经访问过,以避免重复访问。
阅读全文