57.矩阵中的路径
题目内容:
代码及思路:
思路:1)判断当前节点是否满足字符串该字符的要求;2)如果当前位置节点满足,判断上下左右节点的满足情况
class Solution {
public:
bool hasPath(char* matrix, int rows, int cols, char* str)
{
if (matrix == nullptr || rows<1 || cols<1 || str == nullptr)
return false;
bool* visit = new bool[rows*cols];
memset(visit, 0, rows*cols);
int length = 0;
for (int row = 0; row<rows; ++row) {
for (int col = 0; col <cols; ++col) {
if (hasPathCore(matrix, row, col, rows, cols, visit, str, length))
return true;
}
}
delete[] visit;
return false;
}
bool hasPathCore(const char* matrix, int row, int col, int rows, int cols, bool* visit, const char* str, int& length) {
if (str[length] == '\0')
return true;
bool hasPath = false;
if (row >= 0 && row<rows && col >= 0 && col<cols && matrix[row*cols + col] == str[length] && !visit[row*cols + col]) {
++length;
visit[row*cols + col] = true;
hasPath = hasPathCore(matrix, row, col - 1, rows, cols, visit, str, length)
|| hasPathCore(matrix, row - 1, col, rows, cols, visit, str, length)
|| hasPathCore(matrix, row, col + 1, rows, cols, visit, str, length)
|| hasPathCore(matrix, row + 1, col, rows, cols, visit, str, length);
if (!hasPath) {
--length;
visit[row*cols + col] = false;
}
}
return hasPath;
}
};