C语言 C中的随机迷宫生成器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22747974/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Random maze generator in C
提问by lee huy
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)
我不知道如何确保随机迷宫可以从右侧的入口通向左侧的出口,而没有任何墙壁挡住路径。这是我目前正在做的代码。每个人都可以给我一个提示或算法来实现简单的迷宫(进入/退出)吗?谢谢!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("");
}
采纳答案by Sergey K.
You should use one of the well-established maze generation algorithms. Here is a very short C++ implementation of depth first search (DFS) algorithm:
您应该使用一种完善的迷宫生成算法。这是深度优先搜索 (DFS) 算法的一个非常简短的 C++ 实现:
回答by abligh
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
您想使用迷宫生成算法。这些是众所周知的一类算法,它们将生成带有解决方案的迷宫(在某些情况下恰好是一个解决方案)。这里有一篇文章并引用了许多此类算法:http: //en.wikipedia.org/wiki/Maze_generation_algorithm

