def answer_solve_sudoku(__grid):
res = check_sudoku(__grid)
if res is None or res is False:
return res
grid = copy.deepcopy(__grid)
# find the first 0 element and change it to each of 1..9,
# recursively calling this function on the result
for row in xrange(9):
for col in xrange(9):
if grid[row][col] == 0:
for n in xrange(1, 10):
grid[row][col] = n
new = answer_solve_sudoku(grid)
if new is not False:
return new
# backtrack
return False
# if we get here, we found no zeros and so we're finished
return grid
コードはcheck_sudoku(grid)
次のとおりです。グリッドが有効な数独かどうかを返すことができます。
再帰の部分だけ理解できなくて、プロセスを紙に書き留めようとしたのですが、毎回失敗しました。とは何new
ですか?が有効な場合answer_solve_sudoku(grid)
は?
0 から 1..9 ごとに設定し、有効なグリッドかどうかを確認することは知っていますが、プロセス全体を紙に描くことはできません。そして、バックトラックがどのように機能するかを本当に理解できません。
ところで、再帰コードを理解するためのアドバイスはありますか?
よろしくお願いします、
シェン・ユン
編集
私はコードを何度も何度も読みましたが、今ではある程度理解していますが、これについてはよくわかりません。誰かがコメントをくれれば親切です。
1、return new
ソルバーが解を見つけたときにのみ呼び出され、これはその直後に呼び出されますreturn grid
2、いつになるか
# backtrack
return False
呼ばれる?次の解が正しくない場合はcheck_sudoku(__grid)
を返し、次の解が正しければ、正しい解が得られるまでFalse
別の解を呼び出し、正しい解が得られるとを呼び出します。だからいつ:answer_solve_sudoku(grid)
return grid
return new
# backtrack
return False
呼ばれた?