我正在尝试解决众所周知的数独问题。我在这里看到了一些帖子,但是它们采用了不同的方法,并且我一直想弄清楚如何构建代码已经无法正常工作。我正在尝试为任何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
我基本上是想弄清楚为什么我编写的代码在逻辑上不正确,以及我可能会缺少什么。 谢谢!
解决了! 更新了将来使用的工作代码:)