Catalog · How the catalog works
Dijkstra-OOP
- Active · last change 9-20-2026
- ★ 1 on GitHub
README
Dijkstra — Free Pascal
Реализация алгоритма Дейкстры на Free Pascal 3.2.2 с использованием объектно-ориентированного подхода.
Проект разбит на отдельные модули и не использует явные указатели (^, New, Dispose).
Возможности
- поиск кратчайших путей алгоритмом Дейкстры;
- восстановление маршрута между вершинами;
- ориентированные и неориентированные рёбра;
- проверка корректности вершин и весов;
- минимальная приоритетная очередь на основе бинарной кучи;
- разделение графа, очереди и алгоритма по отдельным модулям.
Структура проекта
.
├── main.pas
├── Graph.pas
├── Dijkstra.pas
├── PriorityQueue.pas
└── .gitignoreGraph.pas
Содержит классы:
TEdge— ребро графа;TGraph— граф и управление его рёбрами.
PriorityQueue.pas
Содержит минимальную приоритетную очередь:
TPriorityQueueTQueueItem
Очередь реализована на основе бинарной min-heap.
Dijkstra.pas
Содержит класс:
TDijkstraОтвечает за:
- запуск алгоритма;
- вычисление расстояний;
- хранение предыдущих вершин;
- восстановление кратчайшего пути.
main.pas
Точка входа приложения и пример использования алгоритма.
Требования
- Free Pascal Compiler 3.2.2
- Linux / Windows / macOS
- JetBrains IDE с поддержкой Pascal через Pascal Flow — опционально
Сборка
Выполнить в корне проекта:
fpc main.pasПосле успешной компиляции будет создан исполняемый файл:
MainЗапуск:
./MainПример результата
Distance: 8
Path: 0 -> 1 -> 3 -> 4 -> 5Принцип работы
Алгоритм Дейкстры начинает поиск из исходной вершины и постепенно выбирает вершину с минимальным известным расстоянием.
Для каждой соседней вершины выполняется релаксация:
newDistance = currentDistance + edgeWeightЕсли новое расстояние меньше известного, оно обновляется, а вершина добавляется в приоритетную очередь.
Алгоритм работает с рёбрами, веса которых неотрицательны.
Особенности реализации
Проект использует классы Pascal вместо явных указателей:
TEdge = classЭто позволяет работать с объектными ссылками без ручного использования:
^
New
DisposeПри этом объекты графа явно освобождаются владельцем в Destroy.
Лицензия
Учебный проект. Используйте код свободно для обучения и экспериментов.

