Skip to content

Commit 1afad99

Browse files
committed
2
1 parent 453b2e8 commit 1afad99

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

WordSearch/WordSearch.cpp

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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

Comments
 (0)