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("");
}
有帮助吗?

解决方案

You should use one of the well-established maze generation algorithms. Here is a very short C++ implementation of depth first search (DFS) algorithm:

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top