같은 문제가 발생합니다. NxN 행렬을 만들 필요가 있습니다. (N은 입력으로 주어집니다) 모든 항목이 [1, N] 범위에 있고 항목이 특정 행이나 열에서 두 번 반복됩니다. 대각선에는 아무런 제약이 없습니다.Nxn 행렬 생성 - 스도쿠
또한 모든 실행과 함께 그리드의 출력을 보장하기 위해 난수 생성기를 사용해야합니다.
또한이 문제를 해결하기 위해 백 트랙킹에 대한 힌트를 얻었습니다.
func(i,j):
grid[i][j] = 1 + rand()%N
if(check(grid)==true)
j++
if j == N
j = 0
i++
if i == N
return
else
//resetting the grid entry
grid[i][j] = -1;
//make a recursive call to func(i,j) again
func(i,j)
체크 (격자) 어떤 요소가 두 번 모든 행/열을 반복되어 있지 않은 경우는 true를 돌려 다음과 같이
가 나는 알고리즘의 생각했다.
어딘가에 무한 루프에 갇히게 될지도 모르고 또한 이것으로 역 추적을 사용하지 않을 수도 있다는 것을 알고 있습니다. 주어진 문제에 대해 역 추적을 사용하는 방법에 대한 안내를받을 수 있습니까?
누군가 코드를 제공 할 수 있다면 좋을 것입니다. 감사. 존재하는 경우
complete(S):
If S is completely filled in, return true
find the index [i,j] where there's the fewest immediate choices.
for c in each choice for S[i,j] { // iterated over in a random order
S[i][j] = c
if complete(S) {
return true
}
}
S[i][j] = blank
return false
}
이 절차는 불리언 복귀, 임의의 유효한 솔루션 배열 S를 완료 :