请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。
如果一条路径经过了矩阵的某一格,那么该路径不能再进入该格子。
由于访问过的格子不能再被访问,这里通过为该格子赋值一个特殊符号0
表示不可再进入该格子。递归的过程按照向右、向左
、向下、向上的方式进行展开。当有符合要求的则返回目标布尔值。通常在二维矩阵上找路径这类问题都可以应用回溯法解决。
class Solution:
def has_path(self, matrix, rows, cols, path):
for ri in range(rows):
for ci in range(cols):
if matrix[ri*cols+ci] == path[0]:
if self.find(list(matrix), rows, cols, path[1:], ri, ci):
return True
return False
def find(self, matrix, rows, cols, path, ri, ci):
if not path:
return True
matrix[ri*cols+ci] = '0'
if ci < cols-1 and matrix[ri*cols+(ci+1)] == path[0]:
return self.find(matrix, rows, cols, path[1:], ri, ci+1)
elif ci > 0 and matrix[ri * cols + (ci - 1)] == path[0]:
return self.find(matrix, rows, cols, path[1:], ri, ci-1)
elif ri < rows - 1 and matrix[(ri + 1) * cols + ci] == path[0]:
return self.find(matrix, rows, cols, path[1:], ri+1, ci)
elif ri > 0 and matrix[(ri-1)*cols+ci] == path[0]:
return self.find(matrix, rows, cols, path[1:], ri-1, ci)
else:
return False
st = Solution()
matrix = 'abtgcfcsjdeh'
path = 'bfce'
print(st.has_path(matrix, 3, 4, path))
(最近更新:2019年09月21日)