题目:用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
解答:回溯经典例题,
回溯思想解题框架:

回溯
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