2011-08-31 5 views
3

퍼즐 해법 앱을 코딩하려고합니다. 얼마나 많은 움직임이 필요한지, 얼마나 많은 해결책이 있는지 알아야합니다.퍼즐 해답 - TreeNode 도움말

나는 퍼즐에 너무 많은 세부 정보를 제공하지 않을 것입니다. 하지만 플레이어가 이동하는대로 그리드 (예 : 5 x 7) 주위를 이동하면 장애물을 캡처하여 보드의 상태를 추적해야합니다. 는

은 내가 (플레이어가 시작 위치) 를 루트로 시작하는 TreeNode를을 만들고 모든 가능한까지 가능한 이동의 각 노드의 아이를 줄 필요가 이해 (이것은 문자열이나 배열로 할 수있다) 움직임이 계산됩니다. 퍼즐 통계를 수집 할 수 있습니다. 가능한 솔루션 수, 해결할 최소 동작 수, 해결할 평균 이동 수 등

이동이 가능할 경우 반환 할 퍼즐 논리가 생성되었습니다. TreeNode 구조를 생성하고 이동이 중복되지 않도록하는 데 문제가 있습니다.

퍼즐 앱 자체는 iPhone에 있지만이 솔버/편집기는 Mac에 쓰고 있습니다. 도움이 될 것입니다 매우 많이 감사하겠습니다.

+0

감사합니다. 누군가에게 몇 가지 소스 코드를 포함하여 이야기 할 수 있을까요? TreeNode 클래스를 생성하는 것은 쉽다. 재귀 코드에 대해서는 메소드 나 그냥 속성을 포함시켜야 할까? 동의하고 추가하기 전에 노드가 존재하는지 확인한다. 노드에는 CGPoint (플레이어 위치), 보드 상태, 부모 노드 및 자식 배열이 포함되어야합니다. 다른 것? 도움을 많이 주셔서 감사합니다. –

답변

1

아마도 tree recursion의 변형을 사용할 수 있습니까? 트리를 재귀 적으로 탐색하여 각 끝 노드에서 다른 이동과 관련된 비용이있는 경우 얻을 수있는 것의 강도와 그 위치에 대한 설명을 반환하도록합니다. 물론 이것은 플레이어가 한 방향으로 만 움직일 것을 요구합니다. 그렇지 않으면 나무 구조가 문제를 설명하지 않습니다. 정확한 문제가 어떻게 생겼는지에 대한 자세한 정보가 도움이 될 것입니다.

무거운 알고리즘 일 수도 있지만 작업이 완료됩니다.

1

반복 된 상태를 감지하려면 진행 상태에 따라 상태를 설정하고 새 상태가 발견 될 때마다 이미 존재하는지 확인하십시오. 공간이 문제가된다고해도, 자녀가 부모와 동일하지 않은지 또는이 접근 방식의 제한된 버전인지 여부 만 확인해야합니다.

노드 클래스는 매우 간단합니다. 부모에 대한 포인터 (있는 경우)와 보유하고있는 변수 (예 : 상태)를 포함합니다. 또한 응용 프로그램에 따라 다른 변수가 필요할 수도 있습니다.

노드에 도달하면 후속 기능을 사용하여 거기에서 모든 하위 노드 (한 번에 이동할 수있는 상태)를 가져 와서 목록에 추가합니다. 당신은 나무를 횡단하기 위해 목록에서 뽑습니다.