(一)矩阵中的路径
关键步骤:visited[x][y] = 0
如果当前所在位置的四个方向都无法满足条件,则回溯到上一步,换个方向继续尝试,否则会直接返回False,但其实只尝试了一个方向。特别是四个方向上同时有两个及以上的方向满足下一步的条件时,会出现判断错误。
def hasPath(self , matrix: List[List[str]], word: str) -> bool:
# write code here
visited = [[0 for i in range(len(matrix[0]))] for j in range(len(matrix))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if self.DFS(i, j, matrix, visited, word):
return True
return False
def DFS(self, x, y, matrix, visited, word):
if not word:
return True
if not visited[x][y]:
if matrix[x][y] == word[0]:
if len(word[1:])==0:
return True
visited[x][y] = 1
if x+1 <= len(matrix)-1 and self.DFS(x+1, y, matrix, visited, word[1:]):
return True
if y+1 <= len(matrix[0])-1 and self.DFS(x,y+1, matrix, visited, word[1:]):
return True
if x-1 >= 0 and self.DFS(x-1, y, matrix, visited, word[1:]):
return True
if y-1 >= 0 and self.DFS(x, y-1, matrix, visited, word[1:]):
return True
visited[x][y] = 0
return False
(二)机器人的运动范围
def movingCount(self , threshold: int, rows: int, cols: int) -> int:
# write code here
def calc_thre(x,y):
ans = 0
for i in str(x):
ans += int(i)
for i in str(y):
ans += int(i)
return ans <= threshold
vis = [[0] * cols for _ in range(rows)]
directions = [[0,1],[0,-1],[1,0],[1,-1]]
def dfs(x,y):
if 0<=x<rows and 0<=y<cols and not vis[x][y] and calc_thre(x,y):
vis[x][y] = 1
num = 1
for dx, dy in directions:
num += dfs(x+dx,y+dy)
return num
return 0
return dfs(0,0)