- •Курсовая работа по дисциплине «Алгоритмы и структуры данных» Тема: Реализация алгоритма поиска минимального остова на основе алгоритма Краскала
- •Задание на курсовую работу
- •Введение
- •Алгоритм Крускала и определение графа
- •2. Структура ребра
- •3. Структура графа
- •4. Сортировка пузырьком
- •5. Обход графа
- •6. Чтение матрицы смежности из файла
- •7. Список смежности
- •8. Матрица инцидентности
- •9. Сортировка ребер в лексикографическом порядке
- •10. Оценка общей временной сложности
- •Заключение
- •Список использованных источников
- •Приложение а. Код программы
- •Приложение в пример работы программы
4. Сортировка пузырьком
Алгоритм сортировки пузырьком работает следующим образом: на каждой итерации проходим по всем элементам массива и сравниваем каждый элемент с его соседом справа. Если элемент больше своего соседа, то меняем их местами. Таким образом, на каждой итерации "всплывает" наибольший элемент массива, который затем не участвует в дальнейшей сортировке.
Данная функция реализует алгоритм сортировки пузырьком для массива ребер (Edge), где каждое ребро имеет свой вес (weight). Аргументы функции - массив ребер arr и его размерность n.
В данной функции мы используем два цикла: внешний цикл от 0 до n-1, который определяет количество итераций сортировки, и внутренний цикл от 0 до n-i-1, который проходит по всем элементам массива на текущей итерации. Внутри внутреннего цикла мы сравниваем элементы arr[j] и arr[j+1] по их весу (weight). Если arr[j] имеет больший вес, чем arr[j+1], то мы меняем их местами, используя временную переменную temp типа Edge.
Рис. 4
5. Обход графа
Обход графа - это процесс посещения каждой вершины графа. Обходы графа бывают двух типов: обход в ширину и обход в глубину.
Обход в глубину (Depth-First Search, DFS) начинается с выбора вершины и посещения ее. Затем мы переходим к соседней непосещенной вершине и повторяем процесс до тех пор, пока не посетим все вершины. Если в процессе обхода мы встречаем вершину, которая уже была посещена, то мы возвращаемся к предыдущей вершине и продолжаем поиск соседних непосещенных вершин. Обход в глубину реализуется с помощью стека.
Рис. 5
Обход в ширину (Breadth-First Search, BFS) начинается с выбора вершины и помещения ее в очередь. Затем мы извлекаем вершину из очереди и посещаем ее. Затем мы добавляем все непосещенные соседние вершины в очередь и повторяем процесс до тех пор, пока не посетим все вершины. Если в процессе обхода мы встречаем вершину, которая уже была посещена, то мы пропускаем ее. Обход в ширину реализуется с помощью очереди.
Рис. 6
6. Чтение матрицы смежности из файла
В теории графов и информатике матрица смежности - это квадратная матрица, используемая для представления конечного графа. Элементы матрицы указывают, являются ли пары вершин смежными или нет в графе. В частном случае конечного простого графа матрица смежности представляет собой (0,1)-матрицу с нулями на ее диагонали.
Эта функция читает матрицу смежности из файла и сохраняет ее в двумерный массив "matrix", а также сохраняет названия вершин в массив "graph". Функция принимает три параметра: имя файла, двумерный массив для хранения матрицы смежности и массив для хранения названий вершин. Также есть параметр "correct", который используется для проверки корректности матрицы смежности.
Функция начинается с открытия файла с именем, переданным в параметре "filename". Если файл успешно открыт, то функция считывает первую строку из файла и разбивает ее на отдельные слова, которые представляют названия вершин. Затем функция проходит по каждой строке матрицы смежности и считывает значения в двумерный массив "matrix". Если значение меньше 0, то функция устанавливает флаг "correct" в false и выводит сообщение об ошибке. Если файл не может быть открыт, то функция выводит сообщение об ошибке.
Рис. 7
