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* visited = new bool[rows*cols]; //格子是否被访问过
memset(visited, 0, rows*cols);
int pathLength = 0;//路径字符串的下标pathLength
for (int row = 0; row < rows; row++)
for (int col = 0; col < cols; col++)
if (hasPathCore(matrix, rows, cols, row, col, str, pathLength, visited))
return true;
delete[] visited;
return false;
}
bool hasPathCore(const char* matrix, int rows, int cols, int row, int col, const char* str, int& pathLength, bool *visited)
{
if (str[pathLength] == '\0')
return true;
bool hasPath = false;
if (row >= 0 && row < rows&&col >= 0 && col < cols &&str[pathLength] == matrix[row*cols + col] && !visited[row*cols + col])
{
pathLength++;
visited[row*cols + col] = true;
hasPath = hasPathCore(matrix, rows, cols, row + 1, col, str, pathLength, visited)
|| hasPathCore(matrix, rows, cols, row, col + 1, str, pathLength, visited)
|| hasPathCore(matrix, rows, cols, row - 1, col, str, pathLength, visited)
|| hasPathCore(matrix, rows, cols, row, col - 1, str, pathLength, visited);
if (!hasPath)
{
pathLength--;
visited[row*cols + col] = false;
}
}
return hasPath;
}
};
《剑指offer》面试题12:矩阵中的路径
最新推荐文章于 2020-04-15 15:57:12 发布