Título Descripción
favor diseñar una función que determina si existe una ruta que contiene todos los caracteres de una cadena de caracteres en una matriz. Una trayectoria de entramado puede comenzar desde cualquiera de la matriz, cada paso en la matriz puede ser la izquierda, derecha, arriba, abajo una cuadrícula. Si una ruta que pasa a través de una matriz de una rejilla, la ruta no puede entrar en la red. Por ejemplo la matriz que contiene la ruta "enviado con copia oculta" en una cadena, pero no contiene la matriz "abcb" camino, como una cadena de caracteres en la primera fila de la matriz b ocupar la primera segundos después de que el enrejado, no pueden volver a entrar en el camino esta rejilla.
Solución:
1, la profundidad primero buscar
2, definir una matriz de etiquetas de VIS, marca de posición visitado
buscar 3, cuatro direcciones
class Solution {
public:
bool DFS(char* matrix, int r, int c, int rows, int cols, char* str, int len, bool* vis)
{
if(str[len] == '\0')
return true;
if(matrix[r*cols+c]==str[len] && !vis[r*cols+c])
{
vis[r*cols+c] = 1;
return DFS(matrix, r+1, c, rows, cols, str, len+1, vis) ||
DFS(matrix, r-1, c, rows, cols, str, len+1, vis) ||
DFS(matrix, r, c+1, rows, cols, str, len+1, vis) ||
DFS(matrix, r, c-1, rows, cols, str, len+1, vis);
vis[r*cols+c] = 0;
}
return false;
}
bool hasPath(char* matrix, int rows, int cols, char* str)
{
bool* vis = new bool[rows*cols];
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++)
{
memset(vis, 0, rows*cols);
if(DFS(matrix, i, j, rows, cols, str, 0, vis))
return true;
}
return false;
}
};