单词搜索+回溯法

题目:

思考:

1.经典回溯

实现:

cpp 复制代码
class Solution {
public:
    
    bool  find_word(vector<vector<char>>&board,string word,int pos,int i,int j)
    {
        bool ret=false;
        if (pos==word.size()-1) return  board[i][j]==word[pos];

        if (board[i][j]==word[pos])
        {
            char t=board[i][j];
            board[i][j]='*';
            if (i-1>=0)
            {
                ret=ret||find_word(board,word,pos+1,i-1,j);
            }
            if (j-1>=0)
            {
                ret=ret||find_word(board,word,pos+1,i,j-1);
            }

            if (i+1<board.size())
            {
                ret=ret||find_word(board,word,pos+1,i+1,j);
            }

            if (j+1<board[0].size())
            {
                ret=ret||find_word(board,word,pos+1,i,j+1);
            }
            board[i][j]=t;
            return ret;
        }
        else
        {
            return false;
        }
    } 
    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 (board[i][j]==word[0])
                {
                    if (find_word(board,word,0,i,j))
                    {
                        return true;
                    }
                }
            }
        }

        return false;
    }
};