با داشتن یک صفحه 2D و یک کلمه، پیدا کنید که آیا کلمه در گرید وجود دارد یا خیر. کلمه را میتوان از حروف سلولهای متوالی مجاور ساخت، که در آن سلولهای مجاور به صورت افقی یا عمودی همسایه هستند.
توضیح: این نیاز به یک جستجوی عمق اول (DFS) با بازگشت دارد. هر سلول را پیمایش کنید. اگر یک سلول با حرف اول کلمه مطابقت داشت، یک DFS را شروع کنید. تابع DFS همسایهها را بررسی میکند، اطمینان حاصل میکند که آنها با حرف بعدی مطابقت دارند و در مسیر فعلی بازدید نشدهاند. اگر یک مسیر شکست خورد، با عدم علامتگذاری سلول به عقب برگردید.
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