题目来源:
牛客网
这里写链接内容
这是别人的解法,看起来不是很直观..
class Solution {
public:
bool hasPath(char* matrix, int rows, int cols, char* str)
{
int i;
bool used[(const int)strlen(matrix)];
for (memset(used, false, sizeof(used)),
i = 0; matrix[i] && !dfs(matrix, rows, cols, i / cols, i % cols, str, used);
memset(used, false, sizeof(used)), i++);
return matrix[i];
}
bool dfs(char *matrix, int rows, int cols, int x, int y, char *ptr, bool used[])
{
if (ptr[0] == 0)
return true;
if (!(x >= 0 && x < rows && y >= 0 && y < cols && !used[x * cols + y] && matrix[x * cols + y] == ptr[0]))
return false;
used[x * cols + y] = true;
int dirx[] = {0, 0, 1, -1}, diry[] = {1, -1, 0, 0}, k;
for (k = 0; k < 4 && !dfs(matrix, rows, cols, x + dirx[k], y + diry[k], ptr + 1, used); k++);
return used[x * cols + y] = false, k != 4;
}
};