vb.net에서 스도쿠 퍼즐을 생성하는 프로그램을 만들고 있는데,이 방법으로 보드 위치를 해결할 필요가 있습니다 (특정, 임의의 순서)를 역순으로 다시 풀 수 있습니다. 이 재귀 솔버를 사용하고 있습니다. 스도쿠 해결/알고리즘 생성 문제
이
제가 함께 일하고 코드이다check_conflicts
특정 셀 할당이 직접적으로 기판과 충돌하는지 여부를 판정하는 기능 (따라서 판 전달되고 세포
order(i)
의 인덱스이다
Public Function solve(ByRef board() As Integer) As Boolean
For i = 0 To 80
If board(order(i)) = 0 Then
For j = 1 To 9
board(order(i)) = j
If check_conflicts(board, order(i)) = False Then
If solve(board) = True Then
Return True
End If
End If
Next
board(order(i)) = 0
Return False
End If
Next
Return True
End Function
또한 통과된다). 이 함수는 order
이 0에서 80까지의 목록 일 때 예상대로 작동하지만 order
이 무작위로 셔플 된 목록 인 경우 함수는 매우 길거나 (때로는 1 분 이상) 대개 정답을 얻습니다. order가 80에서 0까지의 숫자 목록 일 때 함수는 아무 것도 해결하지 않고 항상 false를 반환합니다.
나는 코드를 단계별로 시도했지만 재귀 함수로는 어렵다. 아무도 내가 논리적 오류를 볼 수 있는지 궁금해, 고마워!
답장을 보내 주셔서 감사합니다. 귀하의 제안을 시도하고 퍼즐이 불가능한 제약 조건 집합의 오류로 인해 거꾸로 작동하지 않은 이유를 깨달았습니다. 본질적으로 느린 알고리즘에 대해 동일한 문제가 의심 스러웠습니다. 일부 최적화를 구현해야 할 필요가 있습니다. – maxG795