LeetCode Day63 search word

新建一个列表visited,在原board每个点作为起点开始DFS,在DFS过程中,访问过的点相应的visited置为true

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        if(board.empty()||board[0].empty()) return false;
        int m=board.size(),n=board[0].size();
        vector<vector<bool>> visited(m,vector<bool>(n,false));
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++){
                if(search(board,word,0,i,j,visited)) return true;
            }
        return false;
    }
    bool search(vector<vector<char>>& board,string& word,int idx,int i,int j,vector<vector<bool>>& visited){
        if(idx==word.size()) return true;
        int m=board.size(),n=board[0].size();
        if(i<0||i>=m||j<0||j>=n||board[i][j]!=word[idx]||visited[i][j]) return false;
        visited[i][j]=true;
        bool res=search(board,word,idx+1,i+1,j,visited)||
            search(board,word,idx+1,i-1,j,visited)||
            search(board,word,idx+1,i,j+1,visited)||
            search(board,word,idx+1,i,j-1,visited);
        visited[i][j]=false;
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/85715684