Графическое приложение для поиска кратчайших путей между всеми парами вершин в графе с использованием алгоритма Джонсона.
Приложение реализует алгоритм Джонсона, который позволяет находить кратчайшие пути между всеми парами вершин в ориентированном графе. Алгоритм работает с графами, содержащими отрицательные веса ребер (но без отрицательных циклов).
- Ввод матрицы смежности через текстовое поле или загрузку из файла
- Выполнение алгоритма Джонсона для поиска кратчайших путей
- Визуализация графа с помощью Graphviz
- Отображение результатов в удобном табличном формате
- Сохранение и загрузка матриц смежности
- Предустановленные примеры графов
- Python 3.12 или выше
- Graphviz (для визуализации графов)
- Зависимости Python (устанавливаются автоматически):
graphviz>=0.20.0pillow>=10.0.0
-
Клонируйте репозиторий или скачайте проект
-
Установите зависимости:
pip install -r requirements.txt
или используйте uv:
uv sync
-
Установите Graphviz:
- Windows: Скачайте установщик с официального сайта
- Linux:
sudo apt-get install graphviz(Ubuntu/Debian) илиsudo yum install graphviz(CentOS/RHEL) - macOS:
brew install graphviz
Примечание: В проекте уже включена версия Graphviz для Windows в папке
Graphviz-14.1.1-win64/, которая будет использоваться автоматически.
Запустите приложение:
python main.pyМатрица должна быть квадратной, где:
- Числа разделены пробелами
- Строки разделены переносами строк
infили пустая строка означает отсутствие ребра0означает ребро с весом 0 (включая петли)- Другие числа означают вес ребра
Пример:
0 1 3 inf
inf 0 1 2
inf inf 0 1
inf inf inf 0
Ctrl+O- Открыть файлCtrl+S- Сохранить файлF5- Запустить алгоритм
Алгоритм Джонсона состоит из трех этапов:
- Создание расширенного графа: Добавление фиктивной вершины с нулевыми ребрами ко всем остальным вершинам
- Применение Беллмана-Форда: Определение перевешивающих весов для устранения отрицательных весов
- Применение Дейкстры: Поиск кратчайших путей от каждой вершины с использованием перевешенных весов
Временная сложность: O(V² log V + VE), где V - количество вершин, E - количество ребер.
JohnsonAlgorithmGUI/
├── main.py # GUI приложение
├── johnson_algorithm.py # Реализация алгоритма Джонсона
├── pyproject.toml # Конфигурация проекта
├── README.md # Документация
└── Graphviz-14.1.1-win64/ # Локальная версия Graphviz (Windows)
- Обработка ошибок: Полная валидация входных данных и обработка исключений
- Визуализация: Автоматическое создание и отображение графов
- Управление ресурсами: Автоматическая очистка временных файлов
- Типизация: Использование type hints для улучшения читаемости кода
- Алгоритм не работает с графами, содержащими отрицательные циклы
- Визуализация требует установленного Graphviz
- Максимальный размер загружаемого файла: 10 МБ
Этот проект предоставляется "как есть" для образовательных целей.
0.1.0