トピック
回答
DFS検索の簡単な質問です。2次元行列の各点を開始点として、dfsを開始します。条件のいずれかが満たされている限り、trueを返すことができます。
コード
class Solution {
public:
bool dfs(vector<vector<char>> &matrix, string &str, int len, int x, int y) {
if (matrix[x][y] != str[len]) return false;
if (len == str.size() - 1) return true;
char t = str[len];
matrix[x][y] = '*'; //标记一个从未出现过的字符
int dx[4] = {
1, -1, 0, 0};
int dy[4] = {
0, 0, 1, -1};
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a >= 0 && a < matrix.size() && b >= 0 && b < matrix[a].size()) {
if (dfs(matrix, str, len + 1, a, b)) {
return true;
}
}
}
matrix[x][y] = t; //还原
return false;
}
bool hasPath(vector<vector<char>> &matrix, string &str) {
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
if (dfs(matrix, str, 0, i, j)) {
return true;
}
}
}
return false;
}
};