Random maze generator in C

lee huy picture lee huy · Mar 30, 2014 · Viewed 22.1k times · Source

I don't know how to make sure the random maze can lead from the entry on the right side to the exit on the left side without any wall block the path. This is my code I am doing so far. Can everybody give me a hint or algorithm to achieve the simple maze (entry/exit)? Thank you! P/S my problem is the maze generator doesn't ensure the path to the exit...(get stuck)

#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("");
}

Answer

abligh picture abligh · Mar 30, 2014

Your problem is that the algorithm you have chosen does not guarantee that there is a path from your entry point to your exit point. Essentially you fill your maze randomly, and that is not going to result in a guaranteed path (indeed it may result in multiple paths).

You want to use a maze generation algorithm. These are a well known class of algorithms that will generate mazes with a solution (in some cases exactly one solution). There is an article and references to a number of such algorithms here: http://en.wikipedia.org/wiki/Maze_generation_algorithm