剑指OFFER
题目描述:设计一个函数判断一个矩阵是否存在一条包含某字符串的所有字符的路径。
bool hasPath(vector<vector<char>>& matrix, int i, int j, string s, int idx, vector<vector<int>>& visited){
if(idx == s.size()){
return true;
}
int rows = matrix.size();
int cols = matrix[0].size();
if(i >= rows || i < 0 || j >= cols || j < 0){
return false;
}
if(visited[i][j] == 1 || matrix[i][j] != s[idx]){
return false;
}
visited[i][j] = 1;
bool flag = hasPath(matrix, i+1, j, s, idx+1, visited);
flag = flag || hasPath(matrix, i, j+1, s, idx+1, visited);
flag = flag || hasPath(matrix, i-1, j, s, idx+1, visited);
flag = flag || hasPath(matrix, i, j-1, s, idx+1, visited);
if(flag){
return true;
}
visited[i][j] = 0;
return false;
}
bool matrixPath(vector<vector<char>>& matrix, string s){
int rows = matrix.size();
int cols = matrix[0].size();
vector<vector<int>> visited(rows, vector<int>(cols, 0));
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
if(hasPath(matrix, i, j, s, 0, visited)){
return true;
}
}
}
return false;
};
};