题目

23. 矩阵中的路径 - AcWing题库

代码

class Solution {
public:
    //以每一个坐标作为dfs起点
    bool hasPath(vector<vector<char>>& matrix, string str) {
        for (int i = 0; i < matrix.size(); i ++ )
            for (int j = 0; j < matrix[i].size(); j ++ )
                if (dfs(matrix, str, 0, i, j))
                    return true;
        return false;
    }
    //每一层搜索是否符合,一直搜索到底
    //u是递归深度
    bool dfs(vector<vector<char>> &matrix, string &str, int u, int x, int y) {
        if (matrix[x][y] != str[u]) return false; // 到该层不符合
        if (u == str.size() - 1) return true; //成功搜搜底,先判断符不符合
        //符合之后继续偏移
        int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
        //回退标记和存储
        char t = matrix[x][y];
        matrix[x][y] = '*'; // 已搜索
        for (int i = 0; i < 4; i ++ ) { // 每个点的四个搜索方向
            int a = x + dx[i], b = y + dy[i];
            if (a >= 0 && a < matrix.size() && b >= 0 && b < matrix[a].size()) { //偏移不出界
                if (dfs(matrix, str, u + 1, a, b)) return true; // 符合偏移条件开始搜索
            }
        }
        matrix[x][y] = t;//不符合回退
        return false;
    }
};

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部