Diberikan papan 2D dan sebuah kata, temukan apakah kata tersebut ada di dalam kisi. Kata dapat dibangun dari huruf-huruf sel yang berdekatan secara berurutan, di mana sel 'berdekatan' adalah tetangga secara horizontal atau vertikal.
Penjelasan: Ini membutuhkan Depth First Search (DFS) dengan backtracking. Iterasi melalui setiap sel. Jika sebuah sel cocok dengan huruf pertama dari kata, mulailah DFS. Fungsi DFS memeriksa tetangga, memastikan mereka cocok dengan huruf berikutnya dan belum dikunjungi di jalur saat ini. Jika jalur gagal, lakukan backtracking dengan menghapus tanda sel.
function exist(board, word) {
const rows = board.length;
const cols = board[0].length;
function dfs(r, c, index) {
if (index === word.length) return true; // Kata ditemukan
if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[index]) {
return false;
}
const temp = board[r][c];
board[r][c] = '#'; // Tandai sebagai sudah dikunjungi
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