【LeetCode】79. 单词搜索【DFS】

1.题目链接
点击这里

2.解题思路
遍历整个矩阵,从与word首字符相同的位置开始搜索匹配,DFS中记下当前匹配word的最大下标,当下标等于word的最大下标时即匹配成功。

3.代码

class Solution {
    
    
public:

    int n,m;
    int sta[8][8];
    bool flag;

    void dfs(int x,int y,int index,string word,vector<vector<char>>& board)
    {
    
    
        int dx[]={
    
    0,-1,0,1};
        int dy[]={
    
    1,0,-1,0};
        if(index==(int)word.size()-1){
    
    
            flag=true;
            return;
        }else{
    
    
            for(int i=0;i<4;i++){
    
    
                int nx=x+dx[i],ny=y+dy[i];
                if(nx<0||nx>=n||ny<0||ny>=m) continue;
                if(board[nx][ny]==word[index+1]&&!sta[nx][ny]){
    
    
                    sta[nx][ny]=1;
                    dfs(nx,ny,index+1,word,board);
                    sta[nx][ny]=0;
                }
            }
        }
    }

    bool exist(vector<vector<char>>& board, string word) {
    
    

        n=(int)board.size(),m=(int)board.back().size();
        memset(sta,0,sizeof(sta));
        flag=false;
        for(int i=0;i<n;i++){
    
    
            for(int j=0;j<m;j++){
    
    
                if(board[i][j]==word[0]){
    
    
                    sta[i][j]=1;
                    dfs(i,j,0,word,board);
                    sta[i][j]=0;//注意要恢复现场
                }
            }
        }
        return flag;

    }
};

猜你喜欢

转载自blog.csdn.net/qq_43579980/article/details/118109524