DEV//UNIT

Эйлеров путь

Все рёбра ровно один раз: 0 или 2 нечётных вершин.

время O(V + E)память O(V + E)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function eulerianPath(edges: Array<[a: string, b: string]>) {
2 const deg = new Map<string, number>()
3 for (const [a, b] of edges) {
4 deg.set(a, (deg.get(a) ?? 0) + 1)
5 deg.set(b, (deg.get(b) ?? 0) + 1)
6 }
7 const odd = [...deg.keys()].filter((v) => deg.get(v)! % 2 === 1)
8 // Эйлер: 0 или 2 нечётных; путь начинается в одной нечётной
9
10 const graph = buildAdj(edges)
11 const stack = [odd[0] ?? start]
12 const path: string[] = []
13
14 while (stack.length > 0) {
15 const v = stack[stack.length - 1]!
16 if ((graph.get(v) ?? []).length > 0) {
17 const w = graph.get(v)!.pop()!
18 graph.get(w)!.splice(graph.get(w)!.indexOf(v), 1)
19 stack.push(w) // идём по ребру, удаляя его
20 } else {
21 path.push(stack.pop()!) // тупик — в ответ
22 }
23 }
24
25 return path.reverse()
26}

Проблема

Все рёбра ровно один раз: 0 или 2 нечётных вершин.

Что вы видите

Иерхольцер: идём и сжигаем рёбра; тупики разворачиваются в ответ.

Как это работает

Задача о мостах Кёнигсберга (1736) — начало теории графов. Степени решают существование; стек собирает путь из тупиков в обратном порядке.

Пошаговый разбор

  1. 01

    Степени

    Нечётных 0 или 2.

  2. 02

    Сжигание

    Ребро пройдено — нет его.

  3. 03

    Стек

    Тупик → в ответ.

Complexity и ограничения

time
O(V + E)
space
O(V + E)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

DNA

Сборка секвенирования.

Маршруты

Обход улиц/инспекций.

Eulerian cycles

Планирование обхода графа.

Связанные алгоритмы

Shorts

«1736: задача, родившая графы»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

1736: задача, родившая графы
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/eulerian-path