Я пытаюсь решить известную проблему судоку.Я видел здесь несколько постов, но у них другой подход, и я хотел выяснить, почему сборка кода уже не работает.Я пытаюсь дать общее решение для любого N * N судоку
def find_vacant(board,lst):
for row in range(len(board[0])):
for col in range(len(board)):
if board[row][col] == 0:
lst[0] = row
lst[1] = col
return True
return False
def in_row(board,row,num):
for col in range(len(board)):
if board[row][col] == num:
return True
return False
def in_col(board,col,num):
for row in range(len(board)):
if board[row][col] == num:
return True
return False
def in_zone(board,row,col,num):
for i in range(int(len(board)**0.5)):
for j in range(int(len(board)**0.5)):
if board[i+row][j+col] == num:
return True
return False
def safe_location(board,row,col,num):
sqrt = int((len(board))**(0.5))
if not in_row(board,row,num) and not in_col(board,col,num) \
and not in_zone(board,row - row%sqrt,col - col%sqrt,num):
return True
return False
def solve_sudoku(board):
lst = [0,0]
if find_vacant(board,lst) is False:
return True
row = lst[0]
col = lst[1]
for num in range(1,len(board)+1):
if safe_location(board,row,col,num) is True:
board[row][col] = num
if solve_sudoku(board):
return board
board[row][col] = 0
return False
Я в основном пытаюсь выяснить, почему написанный мной код неверен логически, и что я могу упустить.Спасибо!
Исправлено!ОБНОВЛЕНО РАБОЧИЙ КОД ДЛЯ БУДУЩЕГО ИСПОЛЬЗОВАНИЯ:)