Leetcode:Word Search

9 篇文章 0 订阅
4 篇文章 0 订阅
/**
 * 跟走迷宫类似,设置一个标记数组,记录下已经走过的点,dfs深搜,如果能搜到word的末尾,return true
 * 
 */
class Solution {
public:
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
    int n,m;
    bool exist(vector<vector<char>>& board, string word){
        if(board.size()==0){
            return false;
        }
         n=board.size();
         m=board[0].size();
        vector<vector<bool > >vis;
        for(int i=0;i<n;i++){
            vector<bool>a(m,false);
            vis.push_back(a);
        }
        bool  flag=false;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(board[i][j]==word[0]){
//                   for(int i=0;i<n;i++)
//                       for(int j=0;j<m;j++)
//                           vis[i][j]=false;j
                    vis[i][j]=true;
                    flag=serch_word(0,i,j,word,board,vis);
                    if(flag){
                        return true;
                    }
                    vis[i][j]=false;
                }
            }
        }
        return  false;
    }
    bool serch_word(int step,int x,int y,string word,vector<vector<char> >board,vector<vector<bool> >&vis){

        if(step>=word.size()-1){
            return  true;
        }
        for(int i=0;i<4;i++){
            int xx=dx[i]+x;
            int yy=dy[i]+y;
            if(xx<0 || xx>=n || yy<0 || yy>=m || board[xx][yy]!=word[step+1] || vis[xx][yy]){
                continue;
            }
            vis[xx][yy]=true;
            if(serch_word(step+1,xx,yy,word,board,vis)){
                return true;
            }
            vis[xx][yy]=false;
        }
        return false;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值