65、矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        def isValid(i, j):
            return 0 <= i < m and 0 <= j < n

        def dfs(i, j, visited):
            if len(visited) >= len(word):
                return True
            for dx, dy in delt:
                x, y = i + dx, j + dy
                if isValid(x, y) and (x, y) not in visited and word[len(visited)] == board[x][y]:
                    visited.add((x, y))
                    if dfs(x, y, visited):
                        return True
                    visited.remove((x, y))
            return False
                
        m, n = len(board), len(board[0])
        delt = [[0, 1], [0, -1], [1, 0], [-1, 0]]
        for i in range(m):
            for j in range(n):
                visited = set()
                if board[i][j] == word[0]:
                    visited.add((i, j))
                    if dfs(i, j, visited):
                        return True
        return False
                
原文地址:https://www.cnblogs.com/liushoudong/p/13541725.html