当前位置 博文首页 > 中流击水,浪遏飞舟:递归+剪枝&&剑指 Offer 12. 矩阵中

    中流击水,浪遏飞舟:递归+剪枝&&剑指 Offer 12. 矩阵中

    作者:[db:作者] 时间:2021-08-26 12:41

    目的:在字符矩阵中可上下左右寻找给定的字符串,返回bool。

    看了K神的dfs和回溯剪枝,还学习了如何使用方向数组:
    面试题12. 矩阵中的路径( DFS + 剪枝 ,清晰图解)

    class Solution {
    public:
        //dfs+剪枝
        int row,col;
        bool dfs(vector<vector<char>>& board,string word,int i,int j,int k){
            if(i<0 || i>=row || j<0 || j>=col || board[i][j]!=word[k]){
                return false;
            }
            board[i][j]='/0';       //防止遍历回去
            int dx[]={-1,0,1,0};	//静态数组大括号{}
            int dy[]={0,1,0,-1};
            bool res;
            for(int t=0;t<4;t++){
                bool tmp=dfs(board,word,i+dx[t],j+dy[t],k+1);
                res=tmp;
                if(res){
                    break;
                }
            }
            if(k==word.length()-1){
                return true;
            }
            board[i][j]=word[k];        //恢复现场
            return res;
        }
        bool exist(vector<vector<char>>& board, string word) {
            row=board.size();
            col=board[0].size();
            for(int i=0;i<row;i++){
                for(int j=0;j<col;j++){
                    if(dfs(board,word,i,j,0)){
                        return true;
                    }
                }
            }
            return false;
        }
    };
    
    cs