Gegeben ist ein 2D-Gitter und ein Wort. Finden Sie heraus, ob das Wort im Gitter existiert. Das Wort kann aus Buchstaben sequenziell benachbarter Zellen gebildet werden, wobei 'benachbart' horizontal oder vertikal benachbarte Zellen sind.
Erklärung: Dies erfordert eine Tiefensuche (DFS) mit Backtracking. Iterieren Sie durch jede Zelle. Wenn eine Zelle mit dem ersten Buchstaben des Wortes übereinstimmt, starten Sie eine DFS. Die DFS-Funktion überprüft Nachbarn und stellt sicher, dass sie mit dem nächsten Buchstaben übereinstimmen und auf dem aktuellen Pfad nicht besucht wurden. Wenn ein Pfad fehlschlägt, machen Sie die Markierung der Zelle rückgängig (Backtrack).
function exist(board, word) {
const rows = board.length;
const cols = board[0].length;
function dfs(r, c, index) {
if (index === word.length) return true; // Wort gefunden
if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[index]) {
return false;
}
const temp = board[r][c];
board[r][c] = '#'; // Als besucht markieren
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; // Backtrack
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