Логотип
Графы
04.07.2017

Скриншот программы

Репозиторий

Закрыв практику и уйдя на каникулы, самое время вспомнить конец первого курса и процесс сдачи зачёта по дискретной математике. В то время мы как раз проходили методы обхода графов и нахождения кратчайшего пути. Собственно, решению этой проблемы и посвящена сегодняшняя программа. Я подумал, что было бы интересной задачей основательно разобраться в теме и реализовать демонстрацию работы обходов в ширину, в глубину и алгоритм Дейкстры «вживую».

После получения зачёта кодовая база этого проекта, получается, уже «джва» года лежала мёртвым грузом в приватном репозитории Microsoft Team Foundation Server. Но лучше поздно, чем никогда! Немного поправив оформление кода по советам моего нынче любимого ReSharper'а (да, программа написана на C#) и докинув туда всякой "макулатуры", я выкладываю его на всеобщее обозрение в публичном git-репозитории!

Для запуска требуется .NET Framework 4.5!

Язык описания графа

Вообще, граф рисуется случайным образом (поэтому его можно всегда перестроить, нажав на «Сбросить/обновить», если он построился криво), но его структура и номинальные расстояния между вершинами явно задаются с помощью специального и очень простого описательного языка, состоящего всего из четырёх конструкций:

  1. AddVertex(<расстояние>); — добавляет к текущей вершине новую через указанное расстояние и переходит на неё.
  2. Back(); — возвращает указатель текущей вершины на предыдущую.
  3. JoinVertex(номер вершины, <расстояние>); — соединяет текущую вершину с указанной через переданное расстояние.
  4. Close(<расстояние>); — соединяет текущую вершину с самой первой через указанное расстояние и переходит на неё.