用c++写一个迷宫问题代码
时间: 2024-05-05 22:19:01 浏览: 94
用C++编写的迷宫问题
3星 · 编辑精心推荐
好的,这是一个用C语言实现迷宫问题的代码示例:
```
#include <stdio.h>
#define N 5 // 迷宫大小
// 迷宫地图,0表示空地,1表示墙,2表示终点
int maze[N][N] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 2}
};
// 表示从当前位置往四个方向走时的行列坐标变化
int direction[4][2] = {
{-1, 0}, // 上
{0, 1}, // 右
{1, 0}, // 下
{0, -1} // 左
};
// 判断当前位置是否合法
int isValid(int x, int y) {
if (x >= 0 && x < N && y >= 0 && y < N && maze[x][y] != 1) {
return 1;
}
return 0;
}
// 递归函数,从当前位置出发在迷宫中寻找终点
int findExit(int x, int y) {
if (!isValid(x, y)) { // 当前位置不合法
return 0;
}
if (maze[x][y] == 2) { // 已经到达终点
return 1;
}
maze[x][y] = 1; // 标记当前位置已经走过
for (int i = 0; i < 4; i++) { // 遍历四个方向
int nextX = x + direction[i][0];
int nextY = y + direction[i][1];
if (findExit(nextX, nextY)) { // 递归调用下一步
return 1;
}
}
maze[x][y] = 0; // 回溯,标记当前位置没有走过
return 0;
}
int main() {
int startX = 0, startY = 0; // 起点坐标
// 在迷宫地图中找到起点
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (maze[i][j] == 0) {
startX = i;
startY = j;
break;
}
}
}
// 在起点处开始走迷宫
if (findExit(startX, startY)) {
printf("迷宫有解!\n");
} else {
printf("迷宫无解。\n");
}
return 0;
}
```
希望这个示例可以帮助你理解如何用C语言实现迷宫问题。
阅读全文