class Solution: # n 矩阵行 m 矩阵列 # i j 当前位置 # word 单词 k 判断当前单词的位置 # flag_matrix 判断是否已经访问 def dfs(self, matrix, n, m, i, j, word, k, flag_matrix ): if i<0 or i>=n or j<0 or j>=m or(matrix[i][j] != word[k]) or flag_matrix[i][j]: return False # 是否结束 if k == len(word) - 1: return True # 匹配 设置为False flag_matrix[i][j] = True # 开始扩散 if self.dfs(matrix, n,m,i-1,j,word,k+1,flag_matrix) \ or self.dfs(matrix, n,m,i+1,j,word,k+1,flag_matrix) \ or self.dfs(matrix, n,m,i,j-1,word,k+1,flag_matrix) \ or self.dfs(matrix, n,m,i,j+1,word,k+1,flag_matrix): return True # 前面匹配 但是后面不匹配 需要设置为False flag_matrix[i][j] = False return False def hasPath(self , matrix: List[List[str]], word: str) -> bool: if not matrix: return False n = len(matrix) m = len(matrix[0]) flag_matrix = [[False for i in range(m)] for j in range(n)] for i in range(n): for j in range(m): if self.dfs(matrix, n, m, i, j,word, 0,flag_matrix): return True return False