2012-10-23 4 views
0

내 프로그램에 output multiple sudoku solutions을 보내려고합니다. 예를 들어, 당신은 입력으로이 입력 : 복수 스도쿠 솔루션이 필요합니다

8..6..9.5.............2.31...7318.6.24.....73...........279.1..5...8..36..3...... 

.

이의 빈 공간을 나타낸다. 숫자는 이미 채워진 공간을 나타냅니다. 출력은 다음과 같은 스도쿠 솔루션이어야합니다.

814637925325149687796825314957318462241956873638274591462793158579481236183562749 

그러나 여러 솔루션을 출력하고 싶습니다. 이것은 인쇄해야 할 모든 솔루션이 될 것입니다 :

814637925325149687796825314957318462241956873638274591462793158579481236183562749 
814637925325941687796825314957318462241569873638472591462793158579184236183256749 
834671925125839647796425318957318462241956873368247591682793154579184236413562789 
834671925125839647796524318957318462241956873368247591682793154519482736473165289 
834671925125839647796524318957318462241965873368247591682793154519482736473156289 

그러나 내 프로그램은 하나의 솔루션 만 인쇄합니다. 누구나 여러 솔루션을 인쇄 할 수있는 방법을 제안 할 수 있습니까? 감사.

+1

위키 백과는 스도쿠 퍼즐에는 대개 단 하나의 해결책이 있다고 말합니다. –

+0

글쎄, 여러 가지 해결책을 가진 퍼즐을 테스트하고 싶다. – user1567909

+0

흥미로운 알고리즘. 나는 그 해결책이 마지막'return true'를 내 상태의 나머지 응용 프로그램에 알려주는 것으로 바꾸는 것이라고 의심합니다. k = 4는 유효한 답입니다. 그리고 k = 5-9를 계속 확인합니다. 물론이 작업을 수행하려면 원본 'arr'보드를 수정하는 대신 여러 보드 상태를 저장해야합니다. @naysayers ... "일반적으로"유일한 해결책이 있습니다. – Rollie

답변

1

현재 반환하지해야합니다

if(testTheNumber(arr, row, column+1)==true) 
    { 
    return true; 
    } 

대신 알고리즘은 모든 가능한 K 값을 해보자한다. 그리고 마지막에 (모든 숫자를 찾은 경우에만) 솔루션을 인쇄해야합니다.

+0

그럼 행 == 9 일 때 간단히 인쇄 할까? – user1567909

1

솔루션을 찾을 때 단순히 재귀를 중지하지 않으면됩니다.

if (row == 9) { 
    // print solution here 
    return true; 
} 

그냥 같이 Recurse 다른 return true; 및 제거 : 뭔가 같은 예를 들어, (마지막 행에 도달하여) 해결책을 찾을 때 재귀를 중지합니다

testTheNumber(arr, row, column+1); 

위는 것이다 그 이후에 계속해서 더 많은 숫자를 시도해보십시오.

k은 절대로 10이 아니어야하므로 if(k == 10) 부분에 버그가있을 수 있습니다. k 루프의 기존 셀을 0으로 설정해야합니다.

+0

그래서 단순히 행 == 9 다음에 인쇄 한 다음 true를 반환하겠습니까? 그런 다음 testTheNumber (arr, row, column + 1)가 true를 반환하도록 제거하십시오. – user1567909

+0

재귀 호출을 제거하지 말고'if' 부분과'return true' 부분 만 제거하십시오. –

+0

하지만 내 함수가 부울 함수이므로, 함수를 평가하기 위해 일종의 bool이 필요하지 않습니까? 아니면 간단하게 return testTheNumber (arr, row, column + 1) ;; – user1567909