2013-04-11 3 views
5

지뢰 찾기 해결사를 만들려고합니다. 알 수 있듯이 지뢰밭의 어느 필드를 열어도 안전할지 결정하거나 채굴 된 필드를 결정하고 플래그를 지정해야하는 2 가지 방법이 있습니다. 결정하는 첫 번째 방법은 간단하다 우리는 다음과 같이 있습니다지뢰 찾기의 알고리즘 솔루션

경우 (광산의 수를 약 X - X의 주위에 발견 된 광산의 현재 수) X 주위 모든 개봉 필드

을 채굴 한 후 X 주위 개봉 필드 = 수

경우 (X 주변 광산의 수 == X의 주위에 발견 된 광산의 현재 숫자)를 X 주위 모든 개봉 필드는

을 채굴하지 않습니다하지만 내 질문은 : 우리가 어떤 채굴 찾을 수 없을 때 상황에 대해 어떤 또는 안전한 분야와 우리는 1 개 이상의 분야를 볼 필요가 있습니까? 예를 들어

http://img541.imageshack.us/img541/4339/10299095.png

이 상황. 이전 방법으로는 아무 것도 결정할 수 없습니다. 그래서이 경우 알고리즘에 대한 도움이 필요합니다.

나는 이것을 만들기 위해 A * 알고리즘을 사용해야합니다. 그래서 알고리즘의 다음 단계에서 가능한 모든 안전한 상태가 필요한 것입니다. 가능한 모든 안전한 상태를 찾으면 현재 최단 경로에 추가하고 휴리스틱 함수에 따라 경로 목록을 정렬하고 열어야하는 다음 필드를 선택합니다.

+0

알고리즘을 쓰는 것을 피하고 컴퓨터가 스스로 배우도록 할 수는 있지만 더 이상 말할 수는 없습니다./ – BlackBear

+1

제공하는 예제 이미지를 이해할 수 없습니다. 맨 왼쪽의 "2"는 왼쪽 두 번째 행의 필드가 채워지지만 두 번째 "2"는 그 중 하나만 제안합니다. 어떤 게임 컨텍스트에서 이것이 발생합니까? 게임의 정보가 상충 될 수 있다고 상상하고 있습니까? – pjmorse

+0

그러나 알고리즘을 사용하여 그 이미지에서 안전한 필드를 찾을 수 있습니다. 두 가지로 둘러싸인 2를 가져 가라. 두 광산 주변 광산의 수는이 광산 주변의 발견 된 광산의 현재 수와 같다. 그래서 위의 빈 칸을 밝힐 수 있습니다. 아니면 플래그가없는 필드가 있다면 플래그를 표시하는 방법을 알 수 있습니까? – Kevin

답변

8

굉장한 문제는 너무 흥분하기 전에 NP Completeness and Minesweeper과 함께 좋은 최악의 사례와 인간이 어떻게 해결할 수 있는지를 보여주는 presentation을 읽어주십시오. 그럼에도 불구하고 우리가 기본적인 정리 (prune)과 휴리스틱 (heuristics)을 사용한다면 우리는 시간 장벽에 부딪치지 않을 것입니다.

게임을 생성하는 질문은 여기에서 묻습니다 : Minesweeper solving algorithm. algebraic 메소드에는 매우 멋진 게시물이 있습니다. 로컬 정보가 sudoku과 같이 충분하지 않은 경우와 유사하게 try를 다시 추적 할 수 있습니다 (즉, 추측을하고 그 결과가 무효화되는지 확인). 이 technique에 대한 훌륭한 토론을보세요.

+0

실수로 백업 할 수 있다면, 모든 사각형을 한 번 열어보고 어떤 사각형에 광산이 있는지 추적 할 수 있습니다. 나는 OP가 인간과 같은 규칙을 따르는 솔버를 찾고 있다고 생각합니다. 즉, 잘못 움직이면 실패합니다. – mbeckish

+0

네, 물론 다른 모든 것이 실패 할 때 역 추적을 사용하십시오. 분명히 나무는 기하 급수적으로 커집니다. –

+0

하지만 어떻게 광산을 발견하고 게임을 잃지 않고서 되돌릴 수 있습니까? – mbeckish

1

@tigger는 간단한 규칙 집합으로 해결할 수있는 문제는 아니라고 말했습니다. 지뢰 찾기는 DPLL과 같은 역 추적 알고리즘이 유용한 좋은 예입니다. 명제 논리만큼 단순한 것으로 지뢰 찾기를위한 매우 효율적인 해결 방법을 구현할 수 있습니다. AI 추론 & 논리 추론에 익숙한 지 잘 모르겠다면 Stuart Russel과 Peter Norvig의 "Artificial Intelligence - A Modern Approach"책을 보길 원할 것입니다. DPLL과 명제 논리의 빠른 참조를 위해 Google에서 "wumpus world propositional logic"을 검색하십시오.