영벨롭 개발 일지

[알고리즘]랜덤 미로 생성 알고리즘: 엘러(Eller)의 알고리즘 본문

CS/알고리즘

[알고리즘]랜덤 미로 생성 알고리즘: 엘러(Eller)의 알고리즘

영벨롭 2022. 3. 7. 17:54

  DFS나 BFS와 같은 여러 탐색 알고리즘들로 미로를 탐색할 수 있었죠?

 

 오늘은 미로를 직접 만들어보겠습니다. 

 

 미로를 만드는 알고리즘에는 여러가지가 있는데 그 중 Eller's Algorithm 엘러의 알고리즘을 살펴보겠습니다. 

 

 

  • 랜덤 미로 생성 알고리즘 Eller's Algorithm

 엘러의 알고리즘은 미로를 한 행 씩 차례로 생성해나가는 방법입니다. 

 

 가장 빠르게 미로를 생성하는 알고리즘 중 하나이다.

 

 미로의 크기가 N이라면 시간복잡도는 O(N)으로, 미로를 선형시간 안에 만드는 엄청난 성능의 알고리즘입니다. 

 

 

  • 생성 과정

3x5 크기의 미로를 생성하는 과정은 다음과 같습니다. 

 

 

1. 미로의 첫 번째 행을 초기화합니다. 

 

 이때 첫 번째 행에 속한 5개의 칸을 서로 다른 집합에 속하게 합니다. 

 

2. 현재 행에서 첫 번째 칸부터 마지막 칸까지 탐색하여 수평 경로를 만들어줍니다. 

 

인접해 있는 두 칸이 서로 다른 집합에 속해 있다면 두 칸 사이의 벽을 제거할지 남겨둘지 임의로 선택합니다.

이때 벽을 제거한다면 두 칸은 서로 같은 집합에 속하게 됩니다. 

 

 

3. 현재 행과 다음 행 사이의 수직 경로를 만들어줍니다. 

 

 이때, 같은 집합에 속한 칸들 중 적어도 하나는 수직 경로를 만들어야 합니다. 

 벽이 하나 제거가 되었다면, 같은 집합 속 나머지 칸에 대에 대해서 수직 경로를 만들지 말지는 임의로 선택합니다. 

 

 

4. 3.번에서 완성되지 않은 다음 행의 칸들의 집합을 정해줍니다. 

 

 

 

5. 마지막 행에 도달할 때까지 2.~4. 과정을 반복합니다. 

 

6. 마지막 행에 도달하면 인접해 있으면서 서로 다른 집합에 속한 칸들 사이의 모든 벽을 제거합니다. 

 

반응형