C语言中的随机迷宫发生器

C语言中的随机迷宫发生器,c,random,multidimensional-array,maze,C,Random,Multidimensional Array,Maze,我不知道如何确保随机迷宫可以从右侧的入口通向左侧的出口,而不会有任何墙壁阻挡路径。这是我目前正在做的代码。大家能给我一个提示或算法来实现简单的迷宫(入口/出口)?非常感谢。 P/S我的问题是迷宫生成器无法确保出口的路径…(卡住) #包括 #包括 #包括 #定义大小12 void mazeGenerator(字符[][大小]); 内部主(空) { 炭迷宫[大小][大小]; srand((无符号整数)时间(NULL)); 迷宫发电机(迷宫); 返回0; } void mazeGenerator(字符

我不知道如何确保随机迷宫可以从右侧的入口通向左侧的出口,而不会有任何墙壁阻挡路径。这是我目前正在做的代码。大家能给我一个提示或算法来实现简单的迷宫(入口/出口)?非常感谢。 P/S我的问题是迷宫生成器无法确保出口的路径…(卡住)

#包括
#包括
#包括
#定义大小12
void mazeGenerator(字符[][大小]);
内部主(空)
{
炭迷宫[大小][大小];
srand((无符号整数)时间(NULL));
迷宫发电机(迷宫);
返回0;
}
void mazeGenerator(字符a[SIZE][SIZE])
{
行、列的大小=0,r;
//将“#”初始化到左侧墙的所有位置
用于(行=0;行<大小;++行)
{
[行][列]='#';
}
//将“#”初始化到左侧墙的所有位置
用于(行=0;行<大小;++行)
{
a[行][大小-1]='#';
}
//从1->10将“.”初始化为左侧墙随机位置
行=兰德()%11+1;
a[行][0]=';
//从1->10将“.”初始化到右侧墙的随机位置
行=兰德()%11+1;
[行][大小-1]=';
//将“#”初始化到顶部迷宫的所有位置
用于(列=1;列<大小-1;++列)
{
[0][column]='#';
}
//将“#”初始化到底部迷宫的所有位置
用于(列=1;列<大小-1;++列)
{
[SIZE-1][column]='#';
}
//印刷迷宫
认沽权(“”);
puts(“**由Huy Le编写的迷宫生成器**\n”);
用于(行=0;行<大小;++行)
{
用于(列=0;列<大小;++列)
{
printf_s(“%2c”,一个[行][列]);
}
认沽权(“”);
}
认沽权(“”);
}

您的问题是,您选择的算法不能保证存在从入口点到出口点的路径。基本上,你是随机填充迷宫的,这不会产生一条有保证的路径(事实上,它可能会产生多条路径)


您希望使用迷宫生成算法。这是一类众所周知的算法,可以生成带有一个解的迷宫(在某些情况下,只有一个解)。这里有一篇文章和对许多此类算法的引用:

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


只是一个想法,你为什么不先在入口和出口之间生成一条路径,然后建造墙壁,并限制你建造的路径上不应有任何墙壁?我也有同样的想法,但这可以创建一条直线,看起来很不自然。事实上,通用算法确保任意两个选定点之间始终只有一条路径。在上的“链接-迷宫创建”中的长列表中查找不同的方法。
#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("");
}