저는 퍼즐을 풀기 위해 depth-first "brute-force"를 사용하는 파이썬에서 스도쿠 퍼즐 해답을 만들려고합니다. 그러나 여러 번 반복해서 기록한 후에도 같은 오류가 계속 발생합니다.깊이 우선 스도쿠 해결하는 방법?
가능한 한 명확하게 문제를 설명하기 위해 최선을 다할 것입니다. 이것이 깊이 우선 검색과 관련된 첫 번째 문제이므로 분명하지 않은 내용 일 수 있습니다. 여기
는 (세부 사항이 필요하지 않은 곳에서 의사 코드와 혼합) 컷 다운 코드 : 나는 그것을 할 수 있기 때문에def solvePuzzle(puzzle):
<while the puzzle is still not solved>:
<make a copy of the puzzle>
<go through each unsolved box>:
<try to find the value of the box>
<if the current solution is impossible, return to the parent branch>
<if the copy of the puzzle is exactly the same as the puzzle now, no changes have been made, so its time to start branching into different possibilities>:
<pick a random box to guess the number of>
<go through each possible value and run solvePuzzle() on that puzzle>:
<if a solution is returned, return it>
<else, try the next possible value>
<return the puzzle>
로 줄일 수있어 - 미안 경우는 아직 조금 읽기/혼란의.
어떤 이유로 든 퍼즐을 만든 각 복사본을 solvePuzzle()에 설정 한 후에도 모든 복사본이 불가능하다는 것을 알 수 있습니다 (불가능 함으로 인해 추측에 오류가 있음). 모든 숫자가 테스트되기 때문에 이것이 가능하지 않습니다!
Here's the full code (약 50 줄의 코드)으로 충분하지 않을 수 있습니다.
누구든지 도을 제안 할 수 있다면 왜 이런 식으로 작동하지 않는지, 나는 크게 감사 할 것입니다.
감사합니다.
편집 :As promised, here's the "isSolved()" method.
'xrange (81)'에서'i'를 반복하는 대신'xrange (9)'에서'i'와'j'를 반복하지 않으시겠습니까? (그리고 현재'j''를'k'로 이름을 바꿉니다.) – user2357112
읽을 때 조금 혼란 스럽 겠지만 여전히 작동합니다. 내 문제를 해결하는 데 도움이된다면 제안을 사용하는 빠른 버전을 작성할 수 있습니까? – Cisplatin
문제는 아마 당신이 말하는 것에서'isSolved()'에있을 것입니다. – 2rs2ts