Professional Documents
Culture Documents
ЛАБА 5
ЛАБА 5
Хід роботи
Завдання:
1. Неорієнтований граф G(V,E), граф взяти з лабораторної роботи №4,
нанести на ребра напрям. ТА
Н. Контр.
Розроб.
Змн.
Затверд.
Перевір.
Арк. Гречушкiн
Ляшок В.Г.I.M. .
№ докум. Підпис Дата КНУ ЛР.151.21.03.02
Літ. АКНТ
1 КН-22-1
Арк. Аркушів
2. Для заданого графа знайти найкоротший шлях від першої вершини
(джерела) до всіх інших вершин заданого графа, використовуючи
алгоритм Дейкстри.
3. Для заданого графа оцінити пропускну здатність графа за допомогою
алгоритму Форда Фалкерсона.
4. Для заданих алгоритмів провести ручний розрахунок та виконати
програмну реалізацію згідно варіанту.
Граф:
Виконання:
Алгоритм Дейкстри:
Код программи:
using System;
using System.Collections.Generic;
class DijkstraAlgorithm
{
static void Main()
{
int[,] graph = {
{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}
};
Dijkstra(graph, 0);
}
distance[source] = 0;
Арк.
Лабораторна робота 1
for (int v = 0; v < verticesCount; ++v)
{
if (!shortestPathTreeSet[v] &&
graph[u, v] != 0 &&
distance[u] != int.MaxValue &&
distance[u] + graph[u, v] < distance[v])
{
distance[v] = distance[u] + graph[u, v];
}
}
}
PrintSolution(distance, verticesCount);
}
return minIndex;
}
Рис.1
Ручна реалізація:
Арк.
Лабораторна робота 1
Рис 2
Арк.
Лабораторна робота 1
Рис 3
алгоритм Форда Фалкерсона:
Код программи:
using System;
using System.Collections.Generic;
class FordFulkerson
{
static int V = 9; // Кількість вершин у графі
Арк.
Лабораторна робота 1
// Оновлення залишкового графу
for (int v = sink; v != source; v = parent[v])
{
int u = parent[v];
residualGraph[u, v] -= pathFlow;
residualGraph[v, u] += pathFlow;
}
return maxFlow;
}
static bool BFS(int[,] rGraph, int source, int sink, int[] parent)
{
bool[] visited = new bool[V];
Queue<int> queue = new Queue<int>();
visited[source] = true;
queue.Enqueue(source);
parent[source] = -1;
while (queue.Count != 0)
{
int u = queue.Dequeue();
return visited[sink];
}
int source = 0;
int sink = 8;
Арк.
Лабораторна робота 1
Рис.4
Ручна реалізація:
Висновок:
Виконуючи данну лабораторну роботу я дослідв задачу знаходження
найкоротших шляхів від джерела до всіх інших вершин заданого графа
за допомогою алгоритму Дейкстри , та пропускну спроможність
орієнтованого графа за допомогою алгоритма Форда Фалкерсона.
Арк.
Лабораторна робота 1