class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix char字符型vector<vector<>> 
     * @param word string字符串 
     * @return bool布尔型
     */
    bool check(vector<vector<int>> v,vector<vector<char>>& matrix,int i, int j,int index,string& word)
    {
        int row=matrix[0].size();
        int column=matrix.size();
        
        bool result=false;
        if(index>=word.size())
        {
            return true;
        }
        if(i<0||i>=column||j<0||j>=row)
        {
            return false;
        }
        if(v[i][j]!=-1&&matrix[i][j]==word[index])
        {
            result=true;
            v[i][j]=-1;
        }
        return result&&(check(v,matrix,i,j+1,index+1,word)||
        check(v,matrix,i,j-1,index+1,word)||
        check(v,matrix,i-1,j,index+1,word)||
        check(v,matrix,i+1,j,index+1,word));
    }

    bool hasPath(vector<vector<char> >& matrix, string word) {
        // write code here
        // resize(大小),默认初始化为0;
        // vector 默认为0
        int row=matrix[0].size();
        int column=matrix.size();
        
        for(int i=0;i<column;i++)
        {
            for(int j=0;j<row;j++)
            {
                vector<vector<int>> flag(matrix.size(),vector<int>(matrix[0].size()));
                if(check(flag,matrix,i,j,0,word))
                return true;

            }
        }
        
        return false;
    }
};