剑指 Offer 12. 矩阵中的路径_线性代数

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        #采用回溯法解决此问题
        def check(i, j, k):
            directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
            if board[i][j] != word[k]:
                return False
            if k == len(word) -1:
                return True
            visited.add((i, j))
            result = False
            for di, dj in directions:
                newi, newj = i + di, j + dj
                if 0 <= newi < len(board) and 0 <= newj < len(board[0]):
                    if (newi, newj) not in visited:
                        if check(newi, newj, k+1):
                            return True
                            break
            visited.remove((i, j))
            return result
        h, w = len(board), len(board[0])
        visited = set()
        for i in range(h):
            for j in range(w):
                if check(i, j, 0):
                    return True
        return False