Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: graph traversal, BFS, DFS, algorithms

Какие алгоритмы обхода графов существуют?

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

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

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

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

Основные алгоритмы обхода графов

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

Поиск в глубину (DFS)

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

def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    for neighbor in graph[start]:
        if neighbor not in visited:
            dfs(graph, neighbor, visited)
    return visited

Поиск в ширину (BFS)

BFS использует очередь и обходит граф по уровням: сначала все вершины на расстоянии 1, затем 2 и так далее. Идеален для поиска кратчайшего пути в невзвешенном графе.

from collections import deque

def bfs(graph, start):
    visited = set([start])
    queue = deque([start])
    while queue:
        vertex = queue.popleft()
        for neighbor in graph[vertex]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
    return visited

Дополнительные алгоритмы

  • Алгоритм Дейкстры — для кратчайших путей во взвешенном графе с неотрицательными весами.
  • Алгоритм Беллмана-Форда — для графов с отрицательными весами.
  • Топологическая сортировка — для направленных ациклических графов (DAG).

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

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • Python

    Python

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

#graph traversal

#BFS

#DFS

#algorithms

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

  • Аватар

    Python Guru

    Sergey Filichkin

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