-1
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、結果の文字列を返すことになっています。関数が結果を返すことを確認するには、とexit(a)の代わりreturn ab.append(a)

再帰関数によって返された結果を出力しようとすると、r何も返されません。bまた、テーブルを埋めるという事実にもかかわらずb.append(a)、空のテーブルが出力されます。

4

1 に答える 1