Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 19cb1d7

Browse files
authoredAug 23, 2019
Add files via upload
1 parent 696b508 commit 19cb1d7

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed
 

‎Word Search/Word_Search.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// 典型的回溯
2+
// Runtime: 28 ms, faster than 75.07% of C++ online submissions for Word Search.
3+
// Memory Usage: 12.5 MB, less than 52.94% of C++ online submissions for Word Search.
4+
5+
class Solution
6+
{
7+
public:
8+
bool exist(vector<vector<char>>& matrix, string word)
9+
{
10+
// 边界条件处理
11+
if (word.size() == 0) return false;
12+
13+
int row = matrix.size();
14+
if (row == 0) return false;
15+
16+
int col = matrix[0].size();
17+
if (col == 0) return false;
18+
19+
// 循环查找
20+
vector<vector<bool>> visited(row, vector<bool>(col, false));
21+
for (int i = 0; i < row; ++i)
22+
{
23+
for (int j = 0; j < col; ++j)
24+
{
25+
if (matrix[i][j] == word[0])
26+
{
27+
visited[i][j] = true;
28+
29+
if (dfs(matrix, word, visited, i, j, 1))
30+
return true;
31+
32+
visited[i][j] = false;
33+
}
34+
}
35+
}
36+
return false;
37+
}
38+
private:
39+
bool dfs(const vector<vector<char>>& matrix, const string& word, vector<vector<bool>>& visited, int starti, int startj, int start)
40+
{
41+
if (start == word.length())
42+
return true;
43+
else
44+
{
45+
// 向上寻找
46+
if (starti - 1 >= 0 && !visited[starti - 1][startj] && matrix[starti - 1][startj] == word[start])
47+
{
48+
visited[starti - 1][startj] = true;
49+
if (dfs(matrix, word, visited, starti - 1, startj, start + 1))
50+
return true;
51+
visited[starti - 1][startj] = false;
52+
}
53+
54+
// 向下寻找
55+
if (starti + 1 < matrix.size() && !visited[starti + 1][startj] && matrix[starti + 1][startj] == word[start])
56+
{
57+
visited[starti + 1][startj] = true;
58+
if (dfs(matrix, word, visited, starti + 1, startj, start + 1))
59+
return true;
60+
visited[starti + 1][startj] = false;
61+
}
62+
63+
// 向左寻找
64+
if (startj - 1 >= 0 && !visited[starti][startj - 1] && matrix[starti][startj - 1] == word[start])
65+
{
66+
visited[starti][startj - 1] = true;
67+
if (dfs(matrix, word, visited, starti, startj - 1, start + 1))
68+
return true;
69+
visited[starti][startj - 1] = false;
70+
}
71+
72+
// 向右寻找
73+
if (startj + 1 < matrix[0].size() && !visited[starti][startj + 1] && matrix[starti][startj + 1] == word[start])
74+
{
75+
visited[starti][startj + 1] = true;
76+
if (dfs(matrix, word, visited, starti, startj + 1, start + 1))
77+
return true;
78+
visited[starti][startj + 1] = false;
79+
}
80+
81+
return false;
82+
}
83+
}
84+
};

0 commit comments

Comments
 (0)
Please sign in to comment.