迷宫c语言代码
以下是一个简单的迷宫游戏的C语言代码示例:
#include <stdio.h>
#include <stdlib.h>
#define ROW 10
#define COL 10
int maze[ROW][COL] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 1},
{1, 1, 1, 0, 1, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
int visited[ROW][COL];
int solveMaze(int x, int y) {
if (x == ROW - 1 && y == COL - 1) {
visited[x][y] = 1;
return 1;
}
if (x >= 0 && y >= 0 && x < ROW && y < COL && maze[x][y] == 0 && visited[x][y] == 0) {
visited[x][y] = 1;
if (solveMaze(x + 1, y) == 1) {
return 1;
}
if (solveMaze(x, y + 1) == 1) {
return 1;
}
if (solveMaze(x - 1, y) == 1) {
return 1;
}
if (solveMaze(x, y - 1) == 1) {
return 1;
}
visited[x][y] = 0;
return 0;
}
return 0;
}
int main() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
visited[i][j] = 0;
}
}
if (solveMaze(0, 0) == 1) {
printf("迷宫有解!\n");
} else {
printf("迷宫无解!\n");
}
return 0;
}
这个代码示例中,我们使用一个二维数组maze
来表示迷宫,其中1表示墙壁,0表示通路。我们使用另一个二维数组visited
来记录迷宫中的位置是否已经访问过。
solveMaze
函数使用递归的方式来解决迷宫问题。它从起点开始,依次尝试向下、向右、向上、向左四个方向移动,如果能够到达终点,则返回1,表示迷宫有解。如果无法到达终点,则返回0。在每次尝试移动之前,我们需要检查当前位置是否合法(即在迷宫范围内且不是墙壁),以及是否已经访问过。如果当前位置合法且未访问过,则将其标记为已访问,并继续递归调用solveMaze
函数。如果递归调用返回1,则表示找到了通路,直接返回1。如果递归调用返回0,则表示当前位置不是通路,需要将其标记为未访问,并尝试下一个方向。
在main
函数中,我们首先将visited
数组初始化为0,然后调用solveMaze
函数来解决迷宫问题。最后根据solveMaze
函数的返回值判断迷宫是否有解,并输出相应的结果。
以上代码是一个简单的迷宫游戏的解决方案,它使用了递归的方式来搜索迷宫中的通路。在代码中,我们使用了两个二维数组maze
和visited
来表示迷宫和访问状态。
maze
数组表示迷宫的布局,其中1表示墙壁,0表示通路。visited
数组用于记录迷宫中的位置是否已经访问过,初始时所有位置都标记为未访问。
solveMaze
函数是核心函数,它通过递归的方式来搜索迷宫中的通路。函数的参数x
和y
表示当前位置的坐标。函数首先检查当前位置是否为终点,即(x, y)
是否为迷宫的右下角位置。如果是终点,则将该位置标记为已访问,并返回1,表示找到了通路。
如果当前位置不是终点,则需要判断当前位置是否合法。合法的条件是当前位置在迷宫范围内且不是墙壁,并且该位置未被访问过。如果当前位置合法,则将其标记为已访问,并依次尝试向下、向右、向上、向左四个方向移动。在每个方向上递归调用solveMaze
函数,如果递归调用返回1,则表示找到了通路,直接返回1。如果递归调用返回0,则表示当前位置不是通路,需要将其标记为未访问,并尝试下一个方向。
在main
函数中,我们首先将visited
数组初始化为0,然后调用solveMaze
函数来解决迷宫问题。最后根据solveMaze
函数的返回值判断迷宫是否有解,并输出相应的结果。
需要注意的是,以上代码只能判断迷宫是否有解,但不能给出具体的路径。如果需要获取具体的路径,可以在solveMaze
函数中添加一个参数来记录路径,并在递归调用时传递路径信息。另外,以上代码中的迷宫布局是硬编码的,如果需要使用其他迷宫布局,可以修改maze
数组的初始化部分。