a="003020600900305001001806400008102900700000008006708200002609500800203009005010300"
b=[]
def same_row(i,j): return (i/9 == j/9)
def same_col(i,j): return (i-j) % 9 == 0
def same_block(i,j): return (i/27 == j/27 and i%9/3 == j%9/3)
def r(a):
i = a.find('0')
if i == -1:
b.append(a)
return a
excluded_numbers = set()
for j in range(81):
if same_row(i,j) or same_col(i,j) or same_block(i,j):
excluded_numbers.add(a[j])
for m in '123456789':
if m not in excluded_numbers:
return r(a[:i]+m+a[i+1:])
print r(a),b
이것은 스도쿠 해결사입니다. 0과 1-9 숫자를 가진 81 크기 문자열을 입력하고 0없이 문자열을 반환합니다. 주어진 예제는 문자열 a
을 입력하고 결과 문자열을 반환한다고 가정합니다. 당신은 함수가 재귀 함수 r
는 아무 것도 반환하지 않습니다에 의해 반환되는 결과를 인쇄하려고 할 때 exit(a)
대신 return a
및 b.append(a)
파이썬에서 재귀 및 반환 값
를 넣어 결과를 돌려 확인할 수 있습니다. 또한 b.append(a)
으로 b
표를 채우는데도 불구하고 빈 표가 인쇄됩니다.
AFAIK 파이썬으로 재귀 호출의 가치를
return
해야합니다. – Ashalynd원하는 출력의 예는 어떻습니까? –
@JonClements 나는 그가 스도쿠를 풀기 위해 노력하고 있다고 생각하고 그는 해결 된 판을 인쇄하려고한다. – thefourtheye