此题采用回溯发来进行求解,在说之前我想告诉大家,如果大家看过之前别人提交的py版本的代码,会发现不能通过全部的测试用例,现在我根据剑指offer书中的思路写下如下py的代码,希望您批评指正!!!

class Solution:
    def hasPath(self, matrix, rows, cols, path):
        # write code here
        if not matrix  or  not path :
            return False
        visited = [0] * len(matrix)
        result = ''
        length = 0
        for row in range(rows):
            for col in range(cols): 
                if (self.hasPathCore(matrix, path, rows, cols, row, col, visited, result, length)):
                    return True
        del visited        
        return False

    def hasPathCore(self, matrix, path, rows, cols, row, col, visited, result, length):
        if result == path:
            return True
        hasPath = False
        if (row >= 0 and row < rows and col >= 0 and col < cols and (not visited[row*cols + col])\
            and path[length] == matrix[row*cols + col]):
            length += 1
            visited[row*cols + col] = 1
            result += matrix[row*cols + col]
            hasPath = self.hasPathCore(matrix, path, rows, cols, row-1, col, visited, result, length) or \
                      self.hasPathCore(matrix, path, rows, cols, row+1, col, visited, result, length) or \
                      self.hasPathCore(matrix, path, rows, cols, row, col+1, visited, result, length) or \
                      self.hasPathCore(matrix, path, rows, cols, row, col-1, visited, result, length) 
            if (not hasPath):
                length -= 1
                visited[row*cols + col] = 0
                result = result[:-1]
        return hasPath