나는이 스도쿠 해결사와 놀고 있었는데, 나는 그것을 발견했다.파이썬 : 1 인쇄 추가 내 코드를 죽입니까?
여기에 인용 된 것과 같이 완벽합니다. 단 하나의 print a
을 주석 처리하면 (13 행) 주석 처리 한 다음 전체 솔루션을 찾기 전에 중단됩니다 ...?
import sys
from datetime import datetime # for datetime.now()
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('.')
if i == -1: # All solved !
print a
else:
#print 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:
# At this point, m is not excluded by any row, column, or block, so let's place it and recurse
r(a[:i]+m+a[i+1:])
if __name__ == '__main__':
if len(sys.argv) == 2:
filI = open(sys.argv[1])
for pusI in filI:
pusI.strip()
print "pussle:\n",pusI
timStart = datetime.now()
r(pusI) # <- Calling the recursive solver ...
timEnd = datetime.now()
print "Duration (h:mm:ss.dddddd): "+str(timEnd-timStart)
else:
print str(len(sys.argv))
print 'Usage: python sudoku.py puzzle'
프로그램을 파일과 함께 호출해야합니다. 그 파일은 한 줄에 1 스도쿠를 가지고 있어야합니다.
는 테스트를 위해 나는이 사용 :
25...1........8.6...3...4.1..48.6.9...9.4.8...1..29.4.9.53.7....6..5...7.........
질문 :
내가 이해할 수없는 어떻게 하나가 완료되기 전에, 재귀 루프를 깰 관리 '는 인쇄'. 아무도 설명을 줄 수 있습니까?
제공 : 원래는 여기에 위의 스도쿠 솔버 코드를 발견 http://www.scottkirkwood.com/2006/07/shortest-sudoku-solver-in-python.html 그것은 또한에 StackOverflow에 여기에 표시된 것 : Shortest Sudoku Solver in Python - How does it work?
오류가 발생하거나 실행하려고하면 자동으로 반환됩니까? – richardhsu
오류가 발생하는 경우이 오류를 표시 할 수 있습니까? –