迷宫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函数的返回值判断迷宫是否有解,并输出相应的结果。

以上代码是一个简单的迷宫游戏的解决方案,它使用了递归的方式来搜索迷宫中的通路。在代码中,我们使用了两个二维数组mazevisited来表示迷宫和访问状态。

maze数组表示迷宫的布局,其中1表示墙壁,0表示通路。visited数组用于记录迷宫中的位置是否已经访问过,初始时所有位置都标记为未访问。

solveMaze函数是核心函数,它通过递归的方式来搜索迷宫中的通路。函数的参数xy表示当前位置的坐标。函数首先检查当前位置是否为终点,即(x, y)是否为迷宫的右下角位置。如果是终点,则将该位置标记为已访问,并返回1,表示找到了通路。

如果当前位置不是终点,则需要判断当前位置是否合法。合法的条件是当前位置在迷宫范围内且不是墙壁,并且该位置未被访问过。如果当前位置合法,则将其标记为已访问,并依次尝试向下、向右、向上、向左四个方向移动。在每个方向上递归调用solveMaze函数,如果递归调用返回1,则表示找到了通路,直接返回1。如果递归调用返回0,则表示当前位置不是通路,需要将其标记为未访问,并尝试下一个方向。

main函数中,我们首先将visited数组初始化为0,然后调用solveMaze函数来解决迷宫问题。最后根据solveMaze函数的返回值判断迷宫是否有解,并输出相应的结果。

需要注意的是,以上代码只能判断迷宫是否有解,但不能给出具体的路径。如果需要获取具体的路径,可以在solveMaze函数中添加一个参数来记录路径,并在递归调用时传递路径信息。另外,以上代码中的迷宫布局是硬编码的,如果需要使用其他迷宫布局,可以修改maze数组的初始化部分。