[leetcode_79]Word Search

简单搜索题。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution {
public:
    bool result;
    bool exist(vector<vector<char>> &board, string word) {
        vector<vector<int>> flag;
        flag.clear();
        for(int i = 0; i < board.size(); i++) {
            vector<int> item(board[i].size(), 0);
            flag.push_back(item);
        }
        result = false;
        int pos = 0;
        for(int i = 0; i < board.size(); i++) {
            for(int j = 0; j < board[i].size(); j++) {
                if(flag[i][j] == 0 && board[i][j] == word[pos]) {
                    flag[i][j] = 1;
                    pos++;
                    existStep(board, flag, word, i, j, pos);
                    pos--;
                    flag[i][j] = 0;
                }
            }
        }
        return result;
    }
private:
    void existStep(vector<vector<char>> &board, vector<vector<int>> &flag, string word, int x, int y, int pos) {
        if(result) return;
        if(pos >= word.length()) {
            result = true;
            return;
        }
        int walk[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
        for(int i = 0; i < 4; i++) {
            int xn = x + walk[i][0];
            int yn = y + walk[i][1];
            if(xn < 0 || xn >= board.size() || yn < 0 || yn >= board[0].size()) continue;
            if(flag[xn][yn] == 1 || board[xn][yn] != word[pos]) continue;
            flag[xn][yn] = 1;
            pos++;
            existStep(board, flag, word, xn, yn, pos);
            pos--;
            flag[xn][yn] = 0;
        }
    }
};
Licensed under CC BY-NC-SA 4.0