DFSアルゴリズムを使用してASCIIで迷路を作成しようとしています( '#'は壁を表し、空きスペースは '左上隅を開始し、右下を終了します)コーナー。問題は、迷路が作成を開始してから、すべての隣人が既に訪問されているためブロックされていることです。DFSアルゴリズムの迷路生成器
私は左上隅から開始し、訪問先としてセルをマークし、 ''(空きスペースを表します)を入力してから、セルの隣接ノードをランダムに選択しました。しかし、私はこれをwhileループに入れ、これは良い考えではないと確信しています。
ここDFSの私の試み:構造において
int generation(t_maze *maze, int pos_y, int pos_x)
{
int dest;
maze->maze[pos_y][pos_x] = ' ';
maze->visited[pos_y][pos_x] = '1';
while (maze->maze[maze->height - 1][maze->width - 1] == '#')
{
if ((dest = my_rand(1, 4)) == 1 && pos_y - 1 >= 0 && maze->visited[pos_y - 1][pos_x] == '0')
generation(maze, pos_y - 1, pos_x);
else if (dest == 2 && pos_x + 1 < maze->width && maze->visited[pos_y][pos_x + 1] == '0')
generation(maze, pos_y, pos_x + 1);
else if (dest == 3 && pos_y + 1 < maze->height && maze->visited[pos_y + 1][pos_x] == '0')
generation(maze, pos_y + 1, pos_x);
else if (dest == 4 && pos_x - 1 >= 0 && maze->visited[pos_y][pos_x - 1] == '0')
generation(maze, pos_y, pos_x - 1);
my_showtab(maze->maze); //it prints the 2d array
usleep(50000);
}
typedef struct s_maze
{
int width;
int height;
char **maze;
char **visited;
} t_maze;
、 幅が迷路の幅 高さが迷路 迷路の高さが充填されることになっている2次元アレイであります「で」と「#」 が訪れたが、0と1、0と2次元配列である:未訪問、1:私はこの(少し例)のような迷路を持ちたい
を訪れ
########
# #
## #
# #
#######
あなたが求めていることは本当に明確ではありません。 https://en.wikipedia.org/wiki/Maze_generation_algorithmを読んだことがありますか? –
オープンスペースで始まり、そのスペースを壁(および出入口)と繰り返し細かく分割することをお勧めします。 –
はい、私はDFS再帰バックトラッカーを使いたいと思いました迷路を作成するにはウィキペディアのページで。 – Beben