1. 程式人生 > 其它 >leetcode 單詞搜尋 中等

leetcode 單詞搜尋 中等

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}; };