數獨遊戲,用了dfs的深度優先樹。
25行和26行的else將該位置改爲點,是在一次dfs中的,相當於在for循環中不斷嘗試c值中的賦值。
如果所有的c值都不對的時候會進入27行的return false,然後再進入23行的賦值。
class Solution(object):
def solveSudoku(self, board):
def isvaild(i,j):
for m in range(9):
if m!=i and board[m][j]==board[i][j]:
return False
for n in range(9):
if n!=j and board[i][n]==board[i][j]:
return False
for m in range(i/3*3,i/3*3+3):
for n in range(j/3*3,j/3*3+3):
if m!=i and n!=j and board[m][n]==board[i][j]:
return False
return True
for i in range(9):
for j in range(9):
if board[i][j]=='.':
for c in '123456789':
board[i][j]=c
if isvaild(i,j):
if self.solveSudoku(board):
return True
else:
board[i][j] = '.'
else:
board[i][j] = '.'
return False
return True