Проверяет понимание связи между рекурсией, стеком вызовов и итеративным обходом графа в глубину, что важно для оценки алгоритмического мышления.
Обход в глубину (DFS) — это стратегия обхода графа, при которой мы идём как можно глубже по одной ветке, прежде чем вернуться назад. Ключевая идея: последняя посещённая вершина обрабатывается первой, а это классическое поведение структуры LIFO — стека.
Когда мы заходим в новую вершину, мы должны запомнить, куда вернуться. Стек идеально подходит: он хранит путь от старта до текущей вершины, и при возврате мы просто снимаем верхний элемент.
function dfs(node, visited = new Set()) {
if (visited.has(node)) return;
visited.add(node);
console.log(node);
for (const next of node.neighbors) {
dfs(next, visited);
}
}function dfsIterative(start) {
const stack = [start];
const visited = new Set();
while (stack.length) {
const node = stack.pop();
if (visited.has(node)) continue;
visited.add(node);
console.log(node);
for (const next of node.neighbors) stack.push(next);
}
}Итог: DFS опирается на стек как на базовую структуру данных; рекурсия — это лишь удобная форма записи того же стека. Для продакшена на больших графах предпочтительнее итеративный вариант с явным стеком.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
Math
Ключевые слова
Подпишись на Node.js Developer в телеграм