数独求解器给出 Python 的部分解:为什么?
Sudoku Solver gives Partial Solution in Python: Why?
我正在尝试解决 leetcode 数独求解器问题 (Problem description here)。但是我的代码只给出了部分解决方案。
class Solution(object):
def solveSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: None Do not return anything, modify board in-place instead.
"""
def isValid(board, row, col, c):
nRow = 3*(row//3)
nCol = 3*(col//3)
for i in range(9):
#Check Row
if board[row][i]==c:
return False
#Check Column
if board[i][col]==c:
return False
#Check Grid
if board[nRow+(i//3)][nCol+(i%3)]==c:
return False
return True
def solve(board):
for i in range(len(board)):
for j in range(len(board)):
if board[i][j]==".":
for c in ["1","2","3","4","5","6","7","8","9"]:
if isValid(board, i, j, c):
board[i][j]=c
if solve(board):
return True
board[i][j]=="."
return False
return True
solve(board)
if __name__=='__main__':
board1 = [["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]
Solution().solveSudoku(board1)
print(board1)
您在重置位置值时使用比较运算符 (==
) 而不是赋值 (=
):
board[i][j]=="."
应该是:
board[i][j]="."
我正在尝试解决 leetcode 数独求解器问题 (Problem description here)。但是我的代码只给出了部分解决方案。
class Solution(object):
def solveSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: None Do not return anything, modify board in-place instead.
"""
def isValid(board, row, col, c):
nRow = 3*(row//3)
nCol = 3*(col//3)
for i in range(9):
#Check Row
if board[row][i]==c:
return False
#Check Column
if board[i][col]==c:
return False
#Check Grid
if board[nRow+(i//3)][nCol+(i%3)]==c:
return False
return True
def solve(board):
for i in range(len(board)):
for j in range(len(board)):
if board[i][j]==".":
for c in ["1","2","3","4","5","6","7","8","9"]:
if isValid(board, i, j, c):
board[i][j]=c
if solve(board):
return True
board[i][j]=="."
return False
return True
solve(board)
if __name__=='__main__':
board1 = [["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]
Solution().solveSudoku(board1)
print(board1)
您在重置位置值时使用比较运算符 (==
) 而不是赋值 (=
):
board[i][j]=="."
应该是:
board[i][j]="."