请用c++采用递归求解迷宫问题,同时使其能够输出迷宫问题的具体路径,其中迷宫为10行10列,最外一层为无法行走的墙
时间: 2023-05-29 09:07:06 浏览: 122
#include <stdio.h>
// 迷宫地图,0表示可以通过,1表示障碍物,2表示已经走过的路径
int maze[12][12] = {
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,0,0,0,1},
{1,0,1,0,0,0,1,1,1,1,0,1},
{1,0,1,1,1,1,0,1,0,0,0,1},
{1,0,0,0,0,1,0,1,0,1,1,1},
{1,0,1,1,0,0,0,0,0,0,0,1},
{1,0,0,1,1,1,1,0,1,1,0,1},
{1,0,1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,1,1,1,1,1,1,0,1},
{1,1,1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
};
// 打印迷宫
void print_maze() {
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
if (maze[i][j] == 0) {
printf(" "); // 可以通过的路
} else if (maze[i][j] == 1) {
printf("#"); // 障碍物
} else if (maze[i][j] == 2) {
printf("*"); // 路径
}
}
printf("\n");
}
}
// 递归求解迷宫问题
int find_path(int x, int y) {
if (x == 10 && y == 10) { // 到达终点
maze[x][y] = 2; // 标记为已经走过
return 1;
}
if (maze[x][y] == 0) { // 当前位置可以通过
maze[x][y] = 2; // 标记为已经走过
if (find_path(x+1, y) || find_path(x, y+1) || find_path(x-1, y) || find_path(x, y-1)) { // 向四个方向继续寻找
return 1;
} else {
maze[x][y] = 0; // 四个方向都没有找到出口,回溯
return 0;
}
}
return 0;
}
int main() {
printf("迷宫问题求解:\n");
print_maze();
find_path(1, 1);
printf("迷宫问题的路径:\n");
print_maze();
return 0;
}
阅读全文