class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
M = len(board)
N = len(board[0])
vis = [([0]*N) for i in range(M)]
ll_word = len(word)
okk = 0 //是否找到
dir = [[0, 1],[1, 0],[0, -1],[-1, 0]]
def is_in(i:int, j:int): //是否在图内
return (i>=0 and i<M and j>=0 and j<N)
def dfs(i, j, loc):
nonlocal okk //否则无法修改上一个函数的值
if okk==1:
return
if is_in(i, j)==0 or board[i][j]!=word[loc] or vis[i][j]==1 or loc>=ll_word: //不符合条件的舍去
return False
if loc == ll_word-1 and board[i][j] == word[loc]:
okk=1
return
vis[i][j]=1 //做当前的决定
for ww in range(4):
new_i=i + dir[ww][0]
new_j=j + dir[ww][1]
# if (loc+1<ll_word and is_in(new_i, new_j) and vis[new_i][new_j]==0 and board[new_i][new_j]==word[loc+1]):
dfs(new_i, new_j, loc+1) //准备做下次决定
vis[i][j]=0 //取消当前的决定
for i in range(M):
for j in range(N):
# print("i:",i)
# print("j", j)
dfs(i, j, 0)
if okk==1:
return True
return False
剑指offer 12:矩阵中的路径 python dfs 解题
于 2022-01-21 20:05:11 首次发布