Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая аисд.docx
Скачиваний:
3
Добавлен:
06.10.2025
Размер:
724.22 Кб
Скачать

Введение

Цель работы: Реализовать алгоритм поиска минимального остова на основе алгоритма Краскала (Крускала). Продемонстрировать знания следующих тем:

- сортировка,

- обход графов,

- хранение графов,

- построение системы непересекающихся множеств.

Входные данные:

Любой текстовый файл или введённый через консоль набор троек:

A B 3

B C 2

A C 1

Результат в виде отсортированных по имени пар и суммарный вес:

A C

B C

3

Максимальный размер входных данных: 50 вершин

Вершины могут быть заданы любой текстовой последовательностью без пробелов. Вес ребра ограничен интервалом от 0 до 1023 включительно. 

  1. Алгоритм Крускала и определение графа

Алгоритм Крускала - это алгоритм поиска минимального остовного дерева в связном взвешенном графе.

Остовное дерево - это подграф, содержащий все вершины исходного графа и являющийся деревом (не содержит циклов). Минимальное остовное дерево - это остовное дерево с минимальной суммой весов его ребер.

Алгоритм Крускала работает следующим образом:

  1. Сортировка всех ребер графа по возрастанию их веса.

  2. Создание пустого графа, который будет представлять минимальное остовное дерево.

  3. Обход по отсортированным ребрам и добавление их в минимальное остовное дерево, если они не создадут цикл с уже добавленными ребрами. Для проверки наличия цикла можно использовать алгоритм поиска в глубину (DFS) или алгоритм объединения множеств.

  4. Повтор шага 3 до тех пор, пока все вершины графа не будут добавлены в минимальное остовное дерево или пока не произойдет обход всех отсортированных ребер.

Алгоритм Крускала имеет временную сложность O(E log E), где E - количество ребер в графе. Это связано с сортировкой ребер по их весу.

Рис.1

2. Структура ребра

Структура Node представляет узел (вершину) в связном списке. Она содержит два поля: data, которое хранит значение текущего узла, и next, указатель на следующий узел в списке. Конструктор класса Node принимает значение data и инициализирует поле next значением nullptr.

Структура Edge представляет ребро в графе. Она содержит три поля: first и end, которые хранят номера вершин, соединенных данным ребром, и weight, который хранит вес ребра (если граф взвешенный).

Рис. 2

3. Структура графа

Графом называется совокупность двух конечных множеств: V – называемого множеством вершин и множества E пар элементов из V, называемого множеством рёбер, если пары не упорядочены, или множеством дуг, если пары упорядочены.

В первом случае граф называется неориентированным, во втором – ориентированным.

Структура Graph представляет собой граф, который может быть представлен как набор вершин и ребер, соединяющих эти вершины. Она содержит три поля: V, которое хранит количество вершин в графе, E, которое хранит количество ребер в графе, и edges, массив ребер, которые соединяют вершины. Также в структуре Graph есть поле adjacencyList, которое представляет массив связных списков, где каждый связный список соответствует одной вершине графа и содержит все ребра, которые соединяют эту вершину с другими вершинами.

Рис. 3

Соседние файлы в предмете Алгоритмы и системы данных