C中的随机迷宫发生器

时间:2014-03-30 18:25:48

标签: c random multidimensional-array maze

我不知道如何确保随机迷宫可以从右侧的入口通向左侧的出口而没有任何挡墙路径。这是我到目前为止所做的代码。每个人都可以给我一个提示或算法来实现简单的迷宫(进入/退出)吗?谢谢! P / S我的问题是迷宫发生器无法确保退出的路径...(卡住)

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define SIZE 12
void mazeGenerator(char [][SIZE]);

int main(void)
{
    char maze[SIZE][SIZE];
    srand((unsigned int)time(NULL));
    mazeGenerator(maze);
    return 0;
}
void mazeGenerator(char a[SIZE][SIZE])
{
    size_t row,column = 0, r;

    // initialize '#' to all positions of left-hand wall
    for ( row = 0; row < SIZE; ++row )
    {
        a[row][column] = '#';
    }
    // initialize '#' to all positions of left-hand wall
    for ( row = 0; row < SIZE; ++row )
    {
        a[row][SIZE - 1] = '#';
    }

    // initialize '.' to left-hand wall random positions from 1 -> 10
    row = rand() % 11 + 1;
    a[row][0] = '.';

    // initialize '.' to right-hand wall random positions from 1 -> 10
    row = rand() % 11 + 1;
    a[row][SIZE - 1] = '.';

    // intialize '#' to all positions of top maze
    for (column = 1; column < SIZE - 1; ++column)
    {
        a[0][column] = '#';
    }

    // intialize '#' to all positions of bottom maze
    for (column = 1; column < SIZE - 1; ++column)
    {
        a[SIZE - 1][column] = '#';
    }

    // print maze
    puts("");
    puts("** Maze Generator by Huy Le **\n");
    for (row = 0; row < SIZE; ++row)
    {
        for (column = 0; column < SIZE; ++column)
        {
            printf_s("%2c",a[row][column]);
        }
        puts("");
    }
    puts("");
}

2 个答案:

答案 0 :(得分:2)

您的问题是您选择的算法并不能保证从您的入口点到出口点都有路径。基本上你随机填充你的迷宫,这不会导致保证路径(实际上它可能导致多个路径)。

您想使用迷宫生成算法。这些是众所周知的一类算法,它们将使用解决方案生成迷宫(在某些情况下恰好是一个解决方案)。这里有一篇文章和对许多此类算法的引用:http://en.wikipedia.org/wiki/Maze_generation_algorithm

答案 1 :(得分:2)

你应该使用一种成熟的迷宫生成算法。这是深度优先搜索(DFS)算法的非常简短的C ++实现:

http://github.com/corporateshark/random-maze-generator