1
+ class Solution {
2
+ public:
3
+ bool exist (vector<vector<char >>& board, string word) {
4
+ // Start typing your C/C++ solution below
5
+ // DO NOT write int main() function
6
+
7
+ this ->word = word;
8
+ row = board.size ();
9
+ if (row == 0 ) return false ;
10
+ col = board[0 ].size ();
11
+
12
+ for (int i = 0 ; i < row; i++) {
13
+ for (int j = 0 ; j < col; j++) {
14
+ map[i][j] = board[i][j];
15
+ visited[i][j] = false ;
16
+ }
17
+ }
18
+ bool flag = false ;
19
+ for (int i = 0 ; i < row; i++) {
20
+ for (int j = 0 ; j < col; j++) {
21
+ if (map[i][j] == word[0 ]) {
22
+ visited[i][j] = true ;
23
+ flag = DFS (i, j, 1 );
24
+ visited[i][j] = false ;
25
+ if (flag) return flag;
26
+ }
27
+ }
28
+ }
29
+ return false ;
30
+ }
31
+
32
+ private:
33
+ bool isValid (int x, int y) {
34
+ if (0 <= x && x < row && 0 <= y && y < col) {
35
+ return true ;
36
+ }
37
+ return false ;
38
+ }
39
+
40
+ bool DFS (int x, int y, int p) {
41
+ if (p == word.size ())
42
+ return true ;
43
+
44
+ bool flag = true ;
45
+ for (int i = 0 ; i < 4 ; i++) {
46
+ int a = x + dx[i];
47
+ int b = y + dy[i];
48
+ if (isValid (a, b) && !visited[a][b] && map[a][b] == word[p]) {
49
+ visited[a][b] = true ;
50
+ flag = DFS (a, b, p + 1 );
51
+ visited[a][b] = false ;
52
+ if (flag) return true ;
53
+ }
54
+ }
55
+ return false ;
56
+ }
57
+
58
+ private:
59
+ static const int MAXN = 1010 ;
60
+ int dx[4 ] = {1 , -1 , 0 , 0 };
61
+ int dy[4 ] = {0 , 0 , -1 , 1 };
62
+ int row, col;
63
+ // 56ms judge large
64
+ // much faster than pass-by-reference
65
+ char map[MAXN][MAXN];
66
+ bool visited[MAXN][MAXN];
67
+ string word;
68
+ };
0 commit comments