Итак, я написал грубую силовую решатель в C некоторое время назад. Я подумал, что было бы неплохо иметь его и на Python, так что я просто перевел логику, которую я имел (функция для проверки того, может ли значение быть законно помещено в (x, y) и одно, которое находит все решения рекурсивно). Все остальное (в основном я/я) я смог заменить одним словом (ура для Python).Проходящая матрица в рекурсивном решателе sudoku
Проблема в том, что код не работает. «sud» - это матрица 9x9, которая (в начале) содержит неразрешенную судоку. Неизвестные числа представлены нулем.
Программа, похоже, не изменяет значения, хранящиеся в «sud», поэтому я предполагаю, что проблема заключается в области, в которой определена моя матрица? В C я определил «sud» как внешний, как мне это сделать в Python? Или мне нужно передать матрицу в мои функции в качестве аргумента?
Извините, если моя проблема кажется тривиальной, я довольно новичок в Python.
Ниже приведен код, у меня до сих пор:
N = 9
f = open('sudoku.txt', 'r')
tmp = f.read().splitlines()
sud = [[int(x) for x in tmp[i]] for i in range(N)]
def check(x, y, val):
if val in [i for i in sud[y]]: ### check row x for val
return 1
if val in [sud[i][x] for i in range(N)]: ### check column y for val
return 1
xbox = int(x/3) * 3
ybox = int(y/3) * 3
for i in range(xbox, xbox+3):
for j in range(ybox, ybox+3):
if val == sud[i][j]: ### check box for val
return 1
return 0
def solve(x = 0, y = 0):
if x == N:
y += 1
x = 0
if y == N:
return 1
if sud[y][x] > 0:
return solve(x + 1, y)
for i in range(1, N+1):
if not check(x, y, i):
sud[y][x] = i
if solve(x + 1, y):
print(sud)
sud[y][x] = 0
return 0
Что такое тип sud? как он определяется? –
Я добавил его к описанию. – mrbaozi
_ «Я предполагаю, что проблема заключается в области, в которой моя матрица определена» _. Я не думаю, что это возможно. Если 'sud' определяется в верхней части файла, тогда все функции в этом файле должны иметь доступ и мутировать' sud'. – Kevin