
- •«Выделение минимального остовного дерева»
- •Цель работы
- •Введение
- •Теоретическая часть
- •Деревья и циклы
- •Алгоритм выделения остовного дерева
- •Алгоритм выделения минимального остовного дерева нагруженного графа.
- •Блок-схемы
- •Листинг программы
- •Тестирование программы.
- •2) Входящие данные:
- •Заключение
- •Список использованной литературы:
Блок-схемы
В данной работе представлена программа для реализации алгоритма Прима.
Листинг программы
#include <stdio.h>
#include <algorithm.h>
#include <conio.h>
const int MaxN = 101;
int n, m, s;
struct Tedge { int a, b, c; } R[MaxN * MaxN];
bool U[MaxN * MaxN];
int P[MaxN];
bool operator <(const Tedge& a, const Tedge& b) {
return a.c < b.c;
}
int get(int x)
{
if (P[x] != x) P[x] = get(P[x]);
return P[x];
}
void Join(int x, int y)
{
x = get(x);
y = get(y);
if (x == y) P[x] = y; else P[y] = x;
}
int main()
{
freopen("input.txt", "r", stdin);
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
scanf("%d%d%d", &R[i].a, &R[i].b, &R[i].c);
sort(R, R + m);
memset(U, 0, sizeof(U));
s = 0;
for (int i = 1; i <= n; i++) P[i] = i;
for (int i = 1; i <= m; i++)
if (get(R[i].a) != get(R[i].b)) {
Join(R[i].a, R[i].b);
s += R[i].c;
U[i] = true;
}
printf("Ves dereva raven = %d\n", s);
printf("V derevo vhodat rebra:\n");
for (int i = 1; i <= m; i++)
if (U[i]) printf("%d %d\n", R[i].a, R[i].b);
getch();
return 0;
}
Тестирование программы.
1) Входящие данные:
Результат:
2) Входящие данные:
Результат:
Заключение
В курсовой работе был реализован алгоритм для выделения минимального остовного дерева. По данному алгоритму была составлена программа, работа которой была продемонстрирована.
Список использованной литературы:
Кузнецов О.П. Дискретная математика для инженера, 3-е изд., перераб. и доп. – СПб: Издательство «Лань», 2004.