思路
回溯和深度优先(dfs)经常结合在一起。
回溯:解决一个问题需要很多步骤,每个步骤都有很多选择,如果做了一个选择后,就进入下一个步骤,如果不符合问题,就回溯到上一步骤的其他选择,如果符合则在进入下一个步骤。
代码
# -*- coding:utf-8 -*-
class Solution:
def hasPath(self, matrix, rows, cols, path):
# write code here
matrix_ = []
item = []
for i in range(rows):
for j in range(cols):
item.append(matrix[i*cols+j])
matrix_.append(item)
item = []
def dfs(k,i,j):
"""
parameters:
k:字符串的第几个字符
i,j:矩阵中元素的索引
"""
if not 0<=i<rows or not 0<=j<cols or path[k] != matrix_[i][j]:
return False # 当前路径不符合
if k == len(path) - 1:
return True # 当k为最后一个字母时,说明存在符合的路径
tmp = matrix_[i][j]
matrix_[i][j] = '#'
res = dfs(k+1,i-1,j) or dfs(k+1,i+1,j) or dfs(k+1,i,j-1) or dfs(k+1,i,j+1)
matrix_[i][j] = tmp
return res
for i in range(rows):
for j in range(cols):
if dfs(0, i, j):
return True
return False