#与题目【腐烂的橘子】类似,但本题使用的是DFS,应该后进先出,同时有了不能走回头路的限制
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param matrix char字符型二维数组 
# @param word string字符串 
# @return bool布尔型
#
class Solution:
    def hasPath(self , matrix: List[List[str]], word: str) -> bool:
        # write code here
        M,N=len(matrix),len(matrix[0])
        def neighb(a,b):
            for (i,j) in ((a+1,b),(a-1,b),(a,b+1),(a,b-1)):
                if 0<=i<M and 0<=j<N:
                    yield i,j
        f=word[0]
        res=[]
        visits=[]
        for i,l in enumerate(matrix):
            for j,v in enumerate(l):
                if v==f:
                    res.append((i,j,0))
        prev=-1
        while res:
            i,j,idx=res.pop(0)
            if idx==prev:
                visits.clear()
            prev=idx
            visits.append((i,j))
            if idx==len(word)-1:
                return True
            for x,y in neighb(i,j):
                if matrix[x][y]==word[idx+1] and (x,y) not in visits:
                    res.insert(0,(x,y,idx+1))
        print(visits)
        return False