int used[10000][10000];
bool dfs(char** matrix,int rows, int cols, int i, int j, char* str, int n)
{
if(matrix[i][j] != str[n]) return false;
if(n==strlen(str)-1) return true; //枚举到最后一位
used[i][j] = 1;
int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1};
for(int d = 0; d < 4; d++)
{
int a = i + dx[d];
int b = j + dy[d];
if(a>=0 && a<rows && b>=0 && b<cols && !used[a][b]) //枚举四个方向不能越界而且当前的数不能使用
{
if(dfs(matrix, rows, cols, a, b, str, n+1)) return true;
}
}
used[i][j] = 0; //从i, j出发发现没有找到路径,需要回溯之前的状态
return false;
}
bool hasPath(char** matrix, int rows, int cols, char* str) {
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++)
if(dfs(matrix, rows, cols, i, j, str, 0)) return true; //依次枚举每个字符
return false;
}