2D 미로 생성 알고리즘 [닫기]


답변:



8

나는 Kruskal의 알고리즘이 만들어내는 단단한 상처 미로를 선호합니다.

Kruskal의 알고리즘에 대한 표준 설명은 데이터 구조 선택에 대한 펑크에 의존하면서 초심자를 혼란스럽게하는 설명 모호성을 초래하면서 그래프의 위치를 ​​위치 그룹과 구별하지 못한다는 점에서 부적절합니다. 그러므로 나는 Kruskal의 용어를 거부합니다.

다음 용어를 사용합니다.

  • 그래프
    • 미로 자체.
  • 마디
    • 미로의 위치. 사각형 미로에서 이것은 사각형 셀입니다.
  • 가장자리
    • 두 노드 사이의 연결. 사각형 미로에서 이것은 1- 길이 막대입니다.
  • 트리 그룹
    • 비어있을 수있는 노드 세트를 트리로 배열

그리고 그로부터 우리는 다음을 얻습니다.

  1. 트리 그룹 을 포함 하는 그래프 트리 그룹에 대한 그룹 GTG를 작성하십시오.
  2. 미로의 모든 위치에 대해 하나의 노드를 포함하는 하나의 트리 그룹으로 GTG 를 채 웁니다.
  3. 모서리 세트 작성 E
  4. 미로의 모든 유효한 가장자리로 E 를 채 웁니다.
  5. GTG에 둘 이상의 그룹이 있고 E 가 비어 있지 않은 동안 :
  6. E 에서 임의의 가장자리 rE 를 선택
  7. 엔드 포인트 식별 P1P2
  8. E 에서 rE 제거
  9. p1p2 그룹이 각각 속 하는지 확인하십시오 ( 각각 p1gp2g ).
  10. 경우 p1gp2g는 다른, 트리 그룹에 가입 p1gp2g을 에서 P1 > - P2를 , 따라서 나무에 합류, 다른 한 나무의 모든 그룹 소유권을 다시 작성합니다.
  11. 5 단계로 돌아가십시오.
  12. 가장자리가 없지만 둘 이상의 트리가있는 경우 그래프가 연결되지 않았거나 버그가있는 것입니다.
  13. 나무가 하나 밖에 없다면, 완전한 루프 미로가 있습니다.

1
GUI 프로젝트가 있었고 GUI에서 임의의 2D 미로를 만들어야했습니다. 이것은 내가 정확히 한 방법이며 Kruskals lol을 사용하고 있다는 것을 결코 깨닫지 못했습니다. 나는 확실히 그래프를 사용했다는 것을 깨달았다.
Bryan Harrington

1

Wikipedia는 미로 생성 에 대한 훌륭한 자료를 가지고 있습니다. 나는 무작위 Prims 알고리즘 을 사용 하여 훌륭한 결과를 얻었습니다. 나눗셈 알고리즘은 흥미롭게 보이지만 결코 사용하지는 않았습니다.

다음은 prim 's의 위키 백과 예제입니다.

위키 백과의 이미지


1

쉬운 방법 중 하나는 북쪽 벽과 서쪽 벽의 목록을 만든 다음 순열시키는 것입니다. 각 방에 번호를 부여하십시오. 그런 다음 두 방에 같은 번호가없는 한 목록에서 벽 중 하나를 날려 버린 다음 같은 번호를 가진 다른 모든 방에 숫자 중 하나를 전파하십시오. 벽이 다 떨어질 때까지 계속 가십시오. 이것은 사각형 미로 또는 실제로 "잠재적으로 연결된 방"목록을 제공 할 수있는 다른 미로에서 작동합니다. 또한 프로그램하기가 매우 간단합니다.


1

또한 Roguelike 개발에 사용 된 알고리즘 중 일부를 살펴 보겠습니다. Rogue Basin 에는 좋은 시작 자료가 있습니다



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.