123. 單詞搜尋(DFS)
阿新 • • 發佈:2018-11-10
描述
給出一個二維的字母板和一個單詞,尋找字母板網格中是否存在這個單詞。
單詞可以由按順序的相鄰單元的字母組成,其中相鄰單元指的是水平或者垂直方向相鄰。每個單元中的字母最多隻能使用一次。
樣例
給出
board =
[
"ABCE",
"SFCS",
"ADEE"]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,
word = "ABCB", -> 返回 false.
class Solution { public: /** * @param board: A list of lists of character * @param word: A string * @return: A boolean */ bool exist(vector<vector<char>> &board, string &word) { // write your code here // write your code here vector< vector<bool> > mask(board.size(), vector<bool>(board[0].size(), false)); for (int i=0; i<board.size(); ++i) { for (int j=0; j<board[0].size(); ++j) { if (search(board, word, mask, i, j, 0) ) { return true; } } } return false; } bool search(vector< vector<char> >& board, string word, vector< vector<bool> >& mask, int i, int j, int idx) { if (word[idx]==board[i][j]) { mask[i][j] = true; ++idx; if (idx == word.size()) return true; else if (i-1>=0 && !mask[i-1][j] && search(board, word, mask, i-1, j, idx)) return true; else if (i+1< board.size() && !mask[i+1][j] && search(board, word, mask, i+1, j, idx)) return true; else if (j-1>=0 && !mask[i][j-1]&& search(board, word, mask, i, j-1, idx)) return true; else if (j+1< board[0].size() && !mask[i][j+1] && search(board, word, mask, i, j+1, idx)) return true; else { mask[i][j] = false; return false; } } } };