A* (А-стар)
Дейкстра с эвристикой: f = g + h тянет к цели, не теряя корректности.
1function aStar(map: string[], start: P, goal: P): P[] | null {2 const h = (p: P): number => Math.abs(p.r - goal.r) + Math.abs(p.c - goal.c)3 4 const open: P[] = [start]5 const g = new Map<string, number>([ [key(start), 0] ])6 7 while (open.length > 0) {8 // берём узел с минимальным f = g + h9 let best = 010 for (let i = 1; i < open.length; i++) {11 if (g.get(key(open[i]!))! + h(open[i]!) < g.get(key(open[best]!))! + h(open[best]!)) best = i12 }13 const cur = open.splice(best, 1)[0]!14 15 if (cur.r === goal.r && cur.c === goal.c) return reconstruct(cur)16 17 for (const [dr, dc] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) {18 const nr = cur.r + dr, nc = cur.c + dc19 if (nr < 0 || nr >= map.length || nc < 0 || nc >= map[0].length) continue20 if (map[nr]![nc] === '#') continue21 22 const ng = g.get(key(cur))! + 123 if (ng < (g.get(key({ r: nr, c: nc })) ?? Infinity)) {24 g.set(key({ r: nr, c: nc }), ng)25 open.push({ r: nr, c: nc })26 }27 }28 }29 return null30}31 32interface P { r: number; c: number }33const key = (p: P): string => p.r + ':' + p.cПроблема
Дейкстра с эвристикой: f = g + h тянет к цели, не теряя корректности.
Что вы видите
Сетка-лабиринт: раскрытые клетки — visited, кандидаты — frontier, путь подсвечивается в конце.
Как это работает
Эвристика h (манхэттен) делает A* направленным: раскрывает меньше узлов, чем Дейкстра, и гарантированно находит кратчайший путь, если h не переоценивает.
Пошаговый разбор
- 01
f = g + h
Пройденный путь плюс оценка до цели.
- 02
Раскрытие
Берём минимальный f.
- 03
Путь
От цели по предкам.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Пустой вход
Корректно завершается без лишних шагов.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
Связанные алгоритмы
«Поиск пути в играх: почему A* быстрее Дейкстры»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.