กำหนดกระดาน 2D และคำ, ค้นหาว่าคำมีอยู่ในกริดหรือไม่ คำสามารถสร้างขึ้นจากตัวอักษรของเซลล์ที่อยู่ติดกันตามลำดับ, โดยที่เซลล์ ที่อยู่ติดกัน คือเพื่อนบ้านในแนวนอนหรือแนวตั้ง
คำอธิบาย: สิ่งนี้ต้องใช้ Depth First Search (DFS) พร้อม backtracking วนซ้ำผ่านแต่ละเซลล์ หากเซลล์ตรงกับตัวอักษรแรกของคำ, ให้เริ่ม DFS ฟังก์ชัน DFS จะตรวจสอบเพื่อนบ้าน, ตรวจสอบให้แน่ใจว่าตรงกับตัวอักษรถัดไปและยังไม่ได้เยี่ยมชมในเส้นทางปัจจุบัน หากเส้นทางล้มเหลว, ให้ 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; // Word found
if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[index]) {
return false;
}
const temp = board[r][c];
board[r][c] = '#'; // Mark as visited
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