Leetcode 79. 单词搜索

题目描述:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

思路:
遍历二维网格中所有的字符,然后对这个字符开始回溯法查找,判断是否会等于单词的所有字符

代码如下:

class Solution {
public:
bool backtrack(vector<vector<char>>& board,string& word,int x,int y,int k){
    if(k==word.size())
    return true;
    if(x<0||x>=board.size()||y<0||y>=board[0].size()||board[x][y]!=word[k])
    return false;
    if(board[x][y]==word[k]){
        char cur=board[x][y];
        board[x][y]='#';
        if(backtrack(board,word,x+1,y,k+1)||backtrack(board,word,x-1,y,k+1)||backtrack(board,word,x,y+1,k+1)||backtrack(board,word,x,y-1,k+1))
        return true;
        board[x][y]=cur;
    }
    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(backtrack(board,word,i,j,0))
                return true;
            }
        }
        return false;
    }
};

你可能感兴趣的:(leetcode)