JZ65 矩阵中的路径

本文最后更新于:2022年4月9日 中午

image-20211010160156489

Solution

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
class Solution {
private:
// 先声明几个要用的变量,方便调用
vector<vector<int> > visited;
int flag = 0;
int row, col;
int str_size;
public:
bool hasPath(vector<vector<char> >& matrix, string word) {
row = matrix.size();
col = matrix[0].size();
str_size = word.size();
visited = vector<vector<int> >(row, vector<int>(col, 0));
for (int i = 0; i < matrix.size(); i++)
for (int j = 0; j < matrix[0].size(); j++) {
if (matrix[i][j] == word[0]) {
// 第一个字母正确的时候,进入dfs
dfs(i, j, 0, word, matrix);
if (flag) {
return true;
}
}
}
return false;
}

void dfs(int x, int y, int cur, string & word, vector<vector<char> > & matrix) {
if (flag) return;
if (x >= 0 && x < row && y >= 0 && y < col && visited[x][y] == 0 && matrix[x][y] == word[cur]) {
if (cur == str_size - 1) {
flag = 1;
return;
}
visited[x][y] = 1;
dfs(x + 1, y, cur+1, word, matrix);
dfs(x, y + 1, cur+1, word, matrix);
dfs(x - 1, y, cur+1, word, matrix);
dfs(x, y - 1, cur+1, word, matrix);
visited[x][y] = 0; // 回溯法
}
}

};