Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: BFS, DFS, graph traversal, breadth-first search, depth-first search

В чём разница между BFS и DFS при обходе графа? Когда выгоднее каждый?

Вопрос проверяет понимание двух фундаментальных алгоритмов обхода графов и умение выбирать подходящий в зависимости от задачи.

Короткий ответ

BFS (поиск в ширину) обходит граф по уровням, используя очередь. DFS (поиск в глубину) идёт вглубь по одному пути, используя стек или рекурсию. BFS находит кратчайший путь в невзвешенном графе, а DFS использует меньше памяти и подходит для проверки связности или поиска циклов.

Длинный ответ

Основное различие между BFS и DFS

BFS (Breadth-First Search) и DFS (Depth-First Search) — это два основных алгоритма обхода графов. BFS использует очередь и обходит вершины по уровням: сначала все соседи начальной вершины, затем их соседи и так далее. DFS использует стек (или рекурсию) и идёт вглубь по одному пути до конца, затем возвращается.

Когда использовать BFS

BFS гарантирует нахождение кратчайшего пути в невзвешенном графе. Он подходит для задач, где важна минимальная длина пути, например, поиск выхода из лабиринта или минимальное количество ходов в игре. Недостаток — требует больше памяти для хранения очереди.

Когда использовать DFS

DFS использует меньше памяти, так как хранит только текущий путь. Он эффективен для проверки связности графа, поиска циклов, топологической сортировки и задач, где нужно исследовать все возможные пути (например, поиск всех решений головоломки).

Пример кода на JavaScript

// BFS
function bfs(graph, start) {
  const visited = new Set();
  const queue = [start];
  while (queue.length) {
    const node = queue.shift();
    if (visited.has(node)) continue;
    visited.add(node);
    for (const neighbor of graph[node]) {
      queue.push(neighbor);
    }
  }
  return visited;
}

// DFS (рекурсивно)
function dfs(graph, node, visited = new Set()) {
  if (visited.has(node)) return;
  visited.add(node);
  for (const neighbor of graph[node]) {
    dfs(graph, neighbor, visited);
  }
  return visited;
}

Вывод

Выбор между BFS и DFS зависит от задачи: BFS лучше для поиска кратчайшего пути, DFS — для экономии памяти и глубокого анализа структуры графа.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • Networks

Ключевые слова

#BFS

#DFS

#graph traversal

#breadth-first search

#depth-first search

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию