题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如
矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
(代码还不是很明白)
class Solution {
public:
bool hasPath(char* matrix, int rows, int cols, char* str)
{
if(rows == 1 && cols == 1)
if(matrix[0] == str[0]) return true;
else return false;
//**matrix 一维**
//str 目标字符串 str \0
for(int i = 0; i < rows; i ++)
for(int j = 0; j < cols; j ++)
if(dfs(matrix, rows, cols, str, 0, i, j))
return true;
return false;
}
bool dfs(char* matrix, int rows, int cols, char* str, int u, int x, int y)
{
// u 找到了str中的第几个
// x y 二维数组
if(str[u] == '\0') return true;
int dx[4] = {-1, 0, 1,0}, dy[4] = {0, 1, 0, -1};
for(int i = 0; i < 4; i ++)
{
int a = x + dx[i], b = y + dy[i];//上下左右搜索
if(a >= 0 && a < rows && b >= 0 && b < cols && matrix[a * cols + b] == str[u])
{
//在矩阵中找到了字符
char t = matrix[a * cols + b];
matrix[a * cols + b] = '*';//char类型是单引号
if(dfs(matrix, rows, cols, str, u + 1, a, b))
return true;
matrix[a * cols + b] = t;//恢复原来的矩阵,深度回溯时需要用??还是不太明白
}
}
return false;
}
};