递归参数:当前元素在矩阵中的行列索引i和j,当前目标字符在word中的索引k。
终止条件:
返回false:
(1)行或列索引越界
(2)当前矩阵元素与目标字符不同
(3)当前矩阵元素已访问过
返回 true: k = len(word) - 1 ,即字符串 word 已全部匹配。
递推工作:
标记当前矩阵元素: 将 board[i][j] 修改为空字符 '' ,代表此元素已访问过,防止之后搜索时重复访问。
搜索下一单元格:朝当前元素的 上、下、左、右 四个方向开启下层递归,使用或连接,并记录结果至res 。
还原当前矩阵元素:将board[i][j] 元素还原至初始值,即 word[k]。
返回值: 返回布尔量 res ,代表是否搜索到目标字符串。

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

链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/solution/mian-shi-ti-12-ju-zhen-zhong-de-lu-jing-shen-du-yo/
来源:力扣(LeetCode)