Dado un tablero 2D y una palabra, encuentra si la palabra existe en la cuadrícula. La palabra se puede construir a partir de letras de celdas adyacentes secuencialmente, donde las celdas 'adyacentes' son vecinas horizontal o verticalmente.
Explicación: Esto requiere una Búsqueda en Profundidad (DFS) con retroceso. Itera a través de cada celda. Si una celda coincide con la primera letra de la palabra, inicia un DFS. La función DFS comprueba las celdas vecinas, asegurándose de que coincidan con la siguiente letra y que no hayan sido visitadas en la ruta actual. Si una ruta falla, retrocede desmarcando la celda.
function exist(board, word) {
const rows = board.length;
const cols = board[0].length;
function dfs(r, c, index) {
if (index === word.length) return true; // Palabra encontrada
if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[index]) {
return false;
}
const temp = board[r][c];
board[r][c] = '#'; // Marcar como visitado
const found = dfs(r + 1, c, index + 1) ||
dfs(r - 1, c, index + 1) ||
dfs(r, c + 1, index + 1) ||
dfs(r, c - 1, index + 1);
board[r][c] = temp; // Retroceder
return found;
}
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
if (board[r][c] === word[0] && dfs(r, c, 0)) {
return true;
}
}
}
return false;
}
const board = [['A','B','C','E'],['S','F','C','S'],['A','D','E','E']];
console.log(exist(board, 'ABCCED')); // true
console.log(exist(board, 'SEE')); // true
console.log(exist(board, 'ABCB')); // false