복도가 너무 많지 않고 모든 방을 연결하여 벌집 모양의 구조물을 만들 수 있습니까? (단일 방에서 오는 3-4 개 이상의 복도)
아래는 내 방 모양이 기본적으로 무작위로 배치 된 결과입니다.
복도를 현명하게하기를 바라고있는 것.
복도가 너무 많지 않고 모든 방을 연결하여 벌집 모양의 구조물을 만들 수 있습니까? (단일 방에서 오는 3-4 개 이상의 복도)
아래는 내 방 모양이 기본적으로 무작위로 배치 된 결과입니다.
복도를 현명하게하기를 바라고있는 것.
답변:
글쎄, 내가 생각할 수있는 가장 간단한 방법은 모든 방이 적어도 하나의 복도로 연결되어 있는지 확인하는 것부터 시작합니다.
이제 우리는 당신이 모든 방에 갈 수 있다는 것을 알고 있습니다.이 엄격한 선형 미로보다 더 많은 것을 원한다면 방을 밟고 방을 연결하기 위해 무작위로 새로운 경로를 만들 수 있습니다. 방의 일정 비율이 최대 연결에 도달 할 때까지-등
마지막 단계로 다양한 상황에 맞게 결과를 변경하는 규칙을 추가 할 수 있습니다. 예를 들어, 복도가 하나 뿐인 방은 정의상 막 다른 곳이라는 것을 알 수 있습니다. 더 많은 데드 엔드를 만들거나 모든 연결이 2 개 이상 있는지 확인하여 모두 제거 할 수 있습니다. 막 다른 골목에 비밀 통로를 만들 수 있습니다. 보스 룸이 막 다른 곳인지 확인할 수 있습니다. 시작 실이 막 다른지 확인하고 두 번째 방에 최소 X 연결이 있는지 확인하십시오. 광고 인피니 엄.
각 가정과 규칙은 레벨의 모양을 근본적으로 바꿀 수 있지만 이는 재미의 일부입니다! 이것은 적어도 당신이 하이브 / 동굴 같은 방을 시작하게해야합니다.
이 방은 2 차원 평원에 포함 된 그래프 정점이므로 이론적으로 여행중인 판매원 문제를 해결하여 수행 할 수 있습니다. 분명히, 간단한 휴리스틱 은 훌륭하고 합리적인 확장 성을 허용합니다.
모든 방 사이의 모서리 (복도 길이)를 계산합니다. 길이별로 정렬합니다. 사이클을 만들거나 원하는 최대 값 (3-4) (반복) 이상으로 정점 (방)의 정도를 높이 지 않는 한 가장 짧은 복도를 추가합니다. 주기를 확인하기 위해 UnionFind를 적용하거나 작은 데이터에 대해 빠른 BFS를 수행 할 수 있습니다.