剑指 Offer -------矩阵中的路径

在这里插入图片描述

题目链接!

思路:
这道题的话,我们主要是用dfs(当然你也可以用bfs),是道很典型的搜索模板题,这里值得注意的一点就是,我自己写这个dfs的时候,很喜欢用一个book数组来标记哪个节点是否走过,但是其实我们是可以不需要的,在dfs中,我们可以改变这个节点的值来告知这个节点已经遍历过,在回溯的时候恢复成原先的数据即可。

代码:

class Solution {
    
    
public:
    bool exist(vector<vector<char>>& board, string word) {
    
    
        for (int i = 0; i < board.size(); i++) {
    
    
            for (int j = 0; j < board[0].size(); j++) {
    
    
                if (dfs(board, word, i, j, 0))
                    return true;
            }
        }
        return false;
    }
private:
    bool dfs(vector<vector<char>>& b, string& w, int i, int j, int k) {
    
    
        if (i >= b.size() || i < 0 || j >= b[0].size() || j < 0 || b[i][j] != w[k])
            return false;
        if (k == w.length() - 1)
            return true;
        char temp = b[i][j];
        b[i][j] = '/';
        int dx[4] = {
    
    -1, 0, 1, 0}, dy[4] = {
    
    0, 1, 0, -1};
        for (int q = 0; q < 4; q ++ ) {
    
    
            int m = i + dx[q], n = j + dy[q];
            if (dfs(b, w, m, n, k + 1)){
    
    
                b[i][j] = temp;
                return true;
            }
        }
        b[i][j] = temp;
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43743711/article/details/115068399