포켓몬의 얼음 미끄럼 퍼즐과 비슷한 퍼즐 게임을 만들기 위해 무작위로 방향 그래프를 생성하려고합니다.
이것은 본질적으로 무작위로 생성 할 수 있기를 원하는 것입니다 : http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory .
x 및 y 차원에서 그래프의 크기를 제한 할 수 있어야합니다. 링크에 주어진 예에서는 8x4 그리드로 제한됩니다.
내가 겪고있는 문제는 무작위로 그래프를 생성하는 것이 아니라 무작위로 그래프를 생성하는 것입니다. 노드의 반대쪽에 (바위와 같은) 무언가가 필요하기 때문에 2d 공간에서 올바르게 매핑 할 수 있습니다. 슬라이딩을 멈 추면 시각적으로 의미가 있습니다. 이것의 문제점은 때때로 암석이 다른 두 노드 사이 또는 다른 노드 자체의 경로로 끝나서 전체 그래프가 깨지는 것입니다.
내가 아는 소수의 사람들과 문제를 논의한 후, 우리는 해결책으로 이어질 수있는 몇 가지 결론에 도달했습니다.
- 그리드를 구성 할 때 그리드의 장애물을 그래프의 일부로 포함.
- 완전히 채워진 그리드로 시작하고 임의의 경로를 그리고 해당 경로를 작동시키는 블록을 삭제하십시오.
그러면 문제는 더 짧은 경로를 추가로 피하기 위해 삭제할 항목을 파악하게됩니다. 또한 동적 프로그래밍 알고리즘을 만드는 데 능숙한 사람은 없지만 동적 프로그래밍 알고리즘이 도움이 될 것이라고 생각했습니다. 이 문제가 공식적으로 불리는 것 (공식 그래프 문제인 경우)에 대한 아이디어 나 참조가 가장 도움이 될 것입니다.
다음은 무작위로 블록을 배치하고 선택한 시작 / 종료에서 탐색 그래프를 생성하여 지금까지 달성 한 몇 가지 예입니다. (이전 링크에서 설명한) 아이디어는 녹색 S에서 시작하여 녹색 F로 가고 싶다는 것입니다. 위 / 아래 / 왼쪽 / 오른쪽으로 이동하여 원하는 방향으로 계속 움직입니다. 벽. 이 그림에서 회색은 벽, 흰색은 바닥, 자주색 선은 시작부터 끝까지의 최소 길이이며 검은 선과 회색 점은 가능한 경로를 나타냅니다.
무작위로 생성 된 그래프의 몇 가지 나쁜 예는 다음과 같습니다.
다음은 무작위로 생성되거나 손으로 조정 된 그래프의 좋은 예입니다.
또한 퍼즐을 최소 경로를 따라 높은 수준의 노드로 가지고있는 퍼즐로 실제로 재생할 때 더 도전적인 것을 알았습니다.