基于C语言的迷宫求解问题附源代码

使用C语言编写一个迷宫求解问题的程序,在下面代码中,maze 数组表示迷宫的布局,其中 1 表示可以通过的路径,0 表示墙壁或障碍物。 solution 数组用于存储找到的解决方案。使用递归的方式遍历迷宫中的路径,如果找到了目标位置(最右下角),则将路径标记为 1,否则尝试向四个方向移动,并继续递归搜索。 在 main 函数中,调用 solveMaze 函数来解决迷宫问题,如果找到了解决方案,则打印出路径,否则打印出未找到解决方案的提示信息。

#include <stdio.h>

#define SIZE 5

int maze[SIZE][SIZE] = {
    {1, 0, 0, 0, 1},
    {1, 1, 1, 1, 1},
    {0, 0, 0, 0, 1},
    {1, 1, 1, 1, 1},
    {1, 1, 1, 0, 1}
};

int solution[SIZE][SIZE];

int solveMaze(int x, int y) {
    if (x < 0 || x >= SIZE || y < 0 || y >= SIZE)
        return 0;

    if (maze[x][y] == 0)
        return 0;

    if (x == SIZE - 1 && y == SIZE - 1) {
        solution[x][y] = 1;
        return 1;
    }

    if (solution[x][y] == 1)
        return 0;

    solution[x][y] = 1;

    if (solveMaze(x + 1, y) == 1) // Move right
        return 1;
    if (solveMaze(x, y + 1) == 1) // Move down
        return 1;
    if (solveMaze(x - 1, y) == 1) // Move left
        return 1;
    if (solveMaze(x, y - 1) == 1) // Move up
        return 1;

    solution[x][y] = 0;
    return 0;
}

void printSolution() {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%d ", solution[i][j]);
        }
        printf("\n");
    }
}

int main() {
    if (solveMaze(0, 0) == 1) {
        printf("Solution found!\n");
        printSolution();
    } else {
        printf("No solution found.\n");
    }

    return 0;
}

请注意,上述代码中给出了一个简单的迷宫示例,你可以根据实际需要修改迷宫的布局和大小。此外,该代码假设迷宫的起点始终为 (0, 0),终点始终为 (SIZE-1, SIZE-1),你也可以根据需要进行修改。

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享