주어진 크기의 유효한 스도쿠 수를 열거하려고합니다. 스도쿠를 목록으로 변환하여 입력으로 받아 유효한 스도쿠인지 확인하는 기능이 있습니다. 내 원래 방법은 목록의 모든 조합을 확인하기 위해 중첩 된 for 루프를 작성하는 것이 었습니다. 2 x 2 스도쿠의 경우 내 코드는 다음과 같습니다.
def enumerate2x2():
cnt = 0
for i1 in range(1,3):
for i2 in range(1,3):
for i3 in range(1,3):
for i4 in range(1,3):
if checkValidSudoku([i1, i2, i3, i4]):
cnt += 1
print(cnt)
이 코드는 목록의 각 요소가 1 또는 2 인 4 요소 목록 (즉, 2x2 스도쿠에있는 사각형의 수)의 가능한 모든 조합을 생성합니다. 그런 다음 각 조합을 확인합니다.
그러나 5x5 스도쿠에서 이것을 시도 할 때 파이썬은 20 개의 중첩 루프 만 허용하므로 문제가 발생했습니다. 그래서이 추악한 방법을 어떤 크기의 스도쿠에서도 작동하는 것으로 일반화하고 싶습니다. 어떤 도움을 주시면 감사하겠습니다.
모듈을 product
가져 오는 Python 내장 함수 itertools
가 필요합니다.
import itertools
sudoku = list(itertools.product(range(1,3), repeat=4))
for x in range(len(sudoku)):
print sudoku[x]
당신이 찾고 있던 모든 데카르트 곱을 간단히 계산하는 것은 출력 아래에 있습니다.
(1, 1, 1, 1)
(1, 1, 1, 2)
(1, 1, 2, 1)
(1, 1, 2, 2)
(1, 2, 1, 1)
(1, 2, 1, 2)
(1, 2, 2, 1)
(1, 2, 2, 2)
(2, 1, 1, 1)
(2, 1, 1, 2)
(2, 1, 2, 1)
(2, 1, 2, 2)
(2, 2, 1, 1)
(2, 2, 1, 2)
(2, 2, 2, 1)
(2, 2, 2, 2)
이제는 조합이 누락 된 것 같지 않습니까? 이 다른 질문에서 찾아 보게 하기 위해 중요한 파이썬에서 반복과 조합 도 다른 구현에 대한 자세한 내용을.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다