题目:用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
解答:回溯经典例题,
回溯思想解题框架:
回溯
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择本题只要求出是否满足,而没有要求求出满足路径,所以返回True或False即可。
# -*- coding:utf-8 -*-
class Solution:
def hasPath(self, matrix, rows, cols, path):
# write code here
flag = [0 for i in range(rows*cols)]
for i in range(rows):
for j in range(cols):
if self.helper(matrix,rows,cols,i,j,path,0,flag):
return True
return False
def helper(self,matrix,rows,cols,i,j,s,k,flag):
# i 表示行 j 表示列 s 表示需要的字符串 k表示现在字符串长度 flag 表示位置是否被访问
index = i*cols+j
if i<0 or i>=rows or j<0 or j>=cols or matrix[index]!=s[k] or flag[index] == 1:
return False
if k == len(s)-1:
return True
flag[index] = 1
if self.helper(matrix,rows,cols,i+1,j,s,k+1,flag) or self.helper(matrix,rows,cols,i,j+1,s,k+1,flag) or self.helper(matrix,rows,cols,i-1,j,s,k+1,flag) or self.helper(matrix,rows,cols,i,j-1,s,k+1,flag):
return True
flag[index] == 0
return False
京公网安备 11010502036488号