[LeetCode]Word Search 回溯

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

Hide Tags

Array Backtracking


这事一道回溯题,写的有点重复,因为没有将多个if 合在一起。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Solution {
public:
    bool exist(vector<vector<char> > &board, string word) {
        if(word.length()<1) return true;
        if(board.size()==0||board[0].size()==0) return false;
        for(int i =0;i<board.size();i++){
            for(int j =0;j<board[0].size();j++){
                if(board[i][j]==word[0]&&helpFun(board,word,1,i,j))
                    return true;
            }
        }
        return false;
    }

    bool helpFun(vector<vector<char> >&board,string & word,int idx,int beg_i,int beg_j)
    {
        if(idx == word.size())  return true;
        char tmp = board[beg_i][beg_j];
        board[beg_i][beg_j] = ‘*‘;
        if(beg_i>0&&board[beg_i-1][beg_j]==word[idx]&&helpFun(board,word,idx+1,beg_i-1,beg_j)){
            board[beg_i][beg_j] = tmp;
            return true;
        }
        if(beg_i<board.size()-1&&board[beg_i+1][beg_j]==word[idx]&&helpFun(board,word,idx+1,beg_i+1,beg_j)){
            board[beg_i][beg_j] = tmp;
            return true;
        }
        if(beg_j>0&&board[beg_i][beg_j-1]==word[idx]&&helpFun(board,word,idx+1,beg_i,beg_j-1)){
            board[beg_i][beg_j] = tmp;
            return true;
        }
        if(beg_j<board[0].size()-1&&board[beg_i][beg_j+1]==word[idx]&&helpFun(board,word,idx+1,beg_i,beg_j+1)){
            board[beg_i][beg_j] = tmp;
            return true;
        }
        board[beg_i][beg_j] = tmp;
        return false;
    }
};

int main()
{
    vector<vector< char> > board{{‘A‘,‘B‘,‘C‘,‘E‘},{‘S‘,‘F‘,‘C‘,‘S‘},{‘A‘,‘D‘,‘E‘,‘E‘}};
    Solution sol;
    cout<<sol.exist(board,"ABCB")<<endl;
    return 0;
}
时间: 2024-10-12 16:42:20

[LeetCode]Word Search 回溯的相关文章

[LeetCode] Word Search [37]

题目 Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be

LeetCode: Word Search [079]

[题目] Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not

LeetCode: Word Search 解题报告

Word SearchGiven a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell ma

[LeetCode] Word Search II

A simple combination of Implement Trie (Prefix Tree) and Word Search. If you've solved them, this problem will become easy :-) The following code is based on DFS and should be self-explanatory enough. Well, just go ahead and read it. It is long but c

[Leetcode] word search 单词查询

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be us

[LeetCode] Word Search II 词语搜索之二

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le

[LeetCode] Word Search 词语搜索

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be us

[leetcode] Word Search

题目:(Backtrancing) Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter

(每日算法)LeetCode --- Word Search(矩阵中查找单词)

在矩阵中查找给定的单词是否出现,可以向上.向下.向左和向右查找.不能在一个字母上重复查找. Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n