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 차원 배열이 작성 될 미로 미로의 높이 미로 높이의 폭이고 방문하지 않은, 1 : 방문 #의 ' '로 '와'0, 1, 0과 2 차원 배열입니다
내가이 (작은 예) 같은 미로 ,758,483을 갖고 싶어 방문210
당신이 무엇을 요구하고 있는지 분명하지 않습니다. https://en.wikipedia.org/wiki/Maze_generation_algorithm을 읽으셨습니까? –
열린 공간으로 시작하여 그 공간을 벽 (및 출입구)으로 반복하여 세분화하십시오. 열린 공간의 치수가 1이되거나 다른 치수가 1이 될 때까지 사용하십시오. –
예, DFS 재귀 적 후위 추적기를 사용하고 싶습니다. 미로 만들기 위키 백과 페이지. – Beben