Курсовая работа: Нахождение минимального остовного дерева алгоритмом Краскала
Проходя по списку ребер, найдем ребро (i, j) такое, что i и j принадлежат разным компонентам связности. Так как список упорядочен по возрастанию веса ребер, мы будем выбирать ребро с максимальным весом, удовлетворяющее условию.
Добавим это ребро в каркас, увеличим на единицу счетчик counter.
Перейдем к шагу 2.
При реализации алгоритма можно использовать систему непересекающихся множеств для проверки того, входят ли две вершины в одну компоненту связности (изначально каждая вершина входит в своё множество, при добавлении ребра в каркас два соответствующих множества объединяются). Также для проверки связности двух вершин можно использовать любой известный алгоритм: поиск в ширину, поиск в глубину или что-либо другое.
5. Код программы
// ---------------------------------------------
#include <stdio. h>
#include <conio. h>
#include <iostream. h>
// -------------------------------------------
typedef int* tint; // указатель на int
void main ()
{ // int max=100; // Максимальный вес ребра
int n; // количество вершин
tint* G; // исходный граф
tint* H; // матрица списка ребер с весом
tint* K; /*матрица, отмечающая принадлежность
вершины компоненте*/
tint* T; // матрица остовного дерева
tint* L; // список ребер с ценами минимального дерева
// -----ввод графа
int max;
cout<<" Maximalno dopustimoe zna4enie vesa rebra = ";
cin>> max;
cout<<"\n Vvedite 4ilo vershin: \n ";
cin>> n;
G=new tint [n];
for (int i=0; i<n; i++)
G [i] =new int [n];
cout<<" Vvedite nignij treugolnik matrici stoimosti: \n ";