Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: graph traversal, BFS, DFS, visited set, adjacency list

Как выбирать, какие соседние ноды включать в обход, а какие нет?

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

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

Выбор соседних нод для обхода зависит от используемого алгоритма: BFS или DFS. В BFS мы добавляем всех непосещенных соседей в очередь, а в DFS — в стек. Главное правило — не посещать уже посещенные узлы, чтобы избежать зацикливания. Для этого используется множество visited, куда добавляются обработанные ноды.

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

Основы выбора соседних нод при обходе графа

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

Критерии выбора соседей

  • Непосещенные узлы: Включаются только те соседи, которые еще не были обработаны. Для этого используется структура данных visited (множество или массив).
  • Порядок обхода: В BFS соседи добавляются в очередь, что обеспечивает обход по уровням. В DFS соседи добавляются в стек, что ведет к углублению в граф.
  • Направленность графа: В ориентированных графах учитываются только исходящие ребра. В неориентированных — все смежные узлы.
  • Взвешенные графы: Для поиска кратчайшего пути (например, алгоритм Дейкстры) выбор соседей зависит от веса ребер.

Пример кода на JavaScript (BFS)

function bfs(graph, start) {
  const visited = new Set();
  const queue = [start];
  visited.add(start);

  while (queue.length > 0) {
    const node = queue.shift();
    console.log(node);

    for (const neighbor of graph[node]) {
      if (!visited.has(neighbor)) {
        visited.add(neighbor);
        queue.push(neighbor);
      }
    }
  }
}

Пример кода на JavaScript (DFS)

function dfs(graph, start, visited = new Set()) {
  visited.add(start);
  console.log(start);

  for (const neighbor of graph[start]) {
    if (!visited.has(neighbor)) {
      dfs(graph, neighbor, visited);
    }
  }
}

Вывод

Выбор соседних нод для обхода определяется необходимостью избежать повторений и спецификой задачи. Используйте BFS для поиска кратчайшего пути в невзвешенных графах, а DFS — для проверки связности или топологической сортировки. Всегда применяйте visited для предотвращения бесконечных циклов.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Networks

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

#graph traversal

#BFS

#DFS

#visited set

#adjacency list

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.