1 class Solution {
2 public:
3 int m, n;
4 bool search(vector<vector<char> > &board, string & word, int x, int y, vector<vector<bool> >&flag, int off){
5 if (off == word.size()) return true;
6 int dx[4] = { -1, 0, 1, 0 };
7 int dy[4] = { 0, -1, 0, 1 };
8 for (int i = 0; i < 4; i++){
9 int xx = x + dx[i];
10 int yy = y + dy[i];
11 if (xx >= 0 && xx < m && yy >= 0 && yy < n && board[xx][yy] == word[off] && !flag[xx][yy]){
12 flag[xx][yy] = true;
13 if (search(board, word, xx, yy, flag, off + 1))
14 return true;
15 flag[xx][yy] = false;
16 }
17 }
18 return false;
19 }
20 bool exist(vector<vector<char> > &board, string word) {
21 // IMPORTANT: Please reset any member data you declared, as
22 // the same Solution instance will be reused for each test case.
23 if (board.size() == 0 || board[0].size() == 0)
24 return false;
25 m = board.size(), n = board[0].size();
26 int len = word.length();
27 if (len <= 0)
28 return true;
29 vector<vector<bool> >flag = vector<vector<bool> >(m, vector<bool>(n, false));
30 for (int i = 0; i < m; i++){
31 for (int j = 0; j < n; j++){
32 if (board[i][j] != word[0])
33 continue;
34 flag[i][j] = true;
35 if (search(board, word, i, j, flag, 1)){
36 return true;
37 }
38 flag[i][j] = false;
39 }
40 }
41 return false;
42 }
43 };