leetcode 單詞搜尋 中等
阿新 • • 發佈:2021-08-08
dfs 就行,列舉每個點作為起點進行搜尋。剩下的就是剪枝的問題了
class Solution { public: bool exist(vector<vector<char>>& board, string word) { tag.resize(board.size()); for(auto &item : tag) item.resize(board[0].size(), false); for(int i = 0; i < board.size(); ++ i) {for(int j = 0; j < board[0].size(); ++ j) { dfs(board, word, 0, i, j); if(ans) return true; } } return false; } void dfs(vector<vector<char>>& board, const string &word, int idx, int x, int y) { if(ans) return; if(idx == word.size()) { ans = true; return ; } if(x < 0 || x >= board.size() || y < 0 || y >= board[0].size()) return ; if(tag[x][y]) return ; if(board[x][y] != word[idx]) return ; tag[x][y] = true; for(int i = 0; i < 4; ++ i) { dfs(board, word, idx + 1, x + to[i][0], y + to[i][1]); } tag[x][y] = false; } bool ans = false; vector<vector<bool>> tag; int to[4][2] = {0, 1, 0, -1, 1, 0, -1, 0}; };