From 574c75b95b55fdcb5eb0c49bf99ce76f1765fcd1 Mon Sep 17 00:00:00 2001 From: Kuzivanov Sergey <43182277+SergeyKuz1001@users.noreply.github.com> Date: Fri, 1 Nov 2019 16:59:43 +0300 Subject: [PATCH] Create Program.cs --- Task02/Program.cs | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Task02/Program.cs diff --git a/Task02/Program.cs b/Task02/Program.cs new file mode 100644 index 0000000..635b822 --- /dev/null +++ b/Task02/Program.cs @@ -0,0 +1,110 @@ +using System; +using System.IO; +using System.Diagnostics; + +namespace Task02 +{ + class Program + { + static void Main() + { + StreamWriter foutFloyd = new StreamWriter("floyd.txt"); + StreamWriter foutKruskal = new StreamWriter("kruskal.txt"); + StreamWriter foutPrim = new StreamWriter("prim.txt"); + + Console.WriteLine("Введите количество вершин нового графа:"); + string inputN = Console.ReadLine(); + int n = int.Parse(inputN); + Console.WriteLine("Введите примерное количество рёбер нового графа:"); + string inputM = Console.ReadLine(); + int m = int.Parse(inputM); + Console.WriteLine("Введите два числа - диапазон весов рёбер нового графа:"); + string[] inputW = Console.ReadLine().Split(" "); + int minWeight = int.Parse(inputW[0]); + int maxWeight = int.Parse(inputW[1]); + + Console.WriteLine("\nСоздание нового графа..."); + GenerateMatrix.Execute(n, m, minWeight, maxWeight); + Console.WriteLine("Новый граф успешно создан.\n"); + + Stopwatch timeSequentialFloyd = Stopwatch.StartNew(); + int[,] ansSequentialFloyd = SequentialAlgoFloyd.Execute(); + timeSequentialFloyd.Stop(); + Console.WriteLine($"Время исполнения последовательного алгоритма Флойда = {timeSequentialFloyd.ElapsedMilliseconds} мс."); + + Stopwatch timeParallelFloyd = Stopwatch.StartNew(); + int[,] ansParallelFloyd = ParallelAlgoFloyd.Execute(); + timeParallelFloyd.Stop(); + Console.WriteLine($"Время исполнения параллельного алгоритма Флойда = {timeParallelFloyd.ElapsedMilliseconds} мс."); + + Stopwatch timeSequentialKruskal = Stopwatch.StartNew(); + int ansSequentialKruskal = SequentialAlgoKruskal.Execute(); + timeSequentialKruskal.Stop(); + Console.WriteLine($"Время исполнения последовательного алгоритма Краскала = {timeSequentialKruskal.ElapsedMilliseconds} мс."); + + Stopwatch timeParallelKruskal = Stopwatch.StartNew(); + int ansParallelKruskal = ParallelAlgoKruskal.Execute(); + timeParallelKruskal.Stop(); + Console.WriteLine($"Время исполнения параллельного алгоритма Краскала = {timeParallelKruskal.ElapsedMilliseconds} мс."); + + Stopwatch timeParallelPrim = Stopwatch.StartNew(); + int ansParallelPrim = ParallelAlgoPrim.Execute(); + timeParallelPrim.Stop(); + Console.WriteLine($"Время исполнения параллельного алгоритма Прима = {timeParallelPrim.ElapsedMilliseconds} мс."); + + Console.WriteLine(); + + bool ansEquals = true; + for (int i = 0; i < n; i++) + { + for (int j = 0; j < n; j++) + { + if (ansSequentialFloyd[i, j] != ansParallelFloyd[i, j]) + { + ansEquals = false; + break; + } + } + } + if (ansEquals) + { + Console.WriteLine("OK: Ответ параллельного алгоритма Флойда совпал с последовательным."); + } + else + { + Console.WriteLine("WA: Ответ параллельного алгоритма Флойда не совпал с последовательным."); + } + + if (ansSequentialKruskal == ansParallelKruskal) + { + Console.WriteLine("OK: Ответ параллельного алгоритма Краскала совпал с последовательным."); + } + else + { + Console.WriteLine("WA: Ответ параллельного алгоритма Краскала не совпал с последовательным."); + } + + if (ansSequentialKruskal == ansParallelPrim) + { + Console.WriteLine("OK: Ответ параллельного алгоритма Прима совпал с последовательным алгоритмом Краскала."); + } + else + { + Console.WriteLine("WA: Ответ параллельного алгоритма Прима не совпал с последовательным алгоритмом Краскала."); + } + + for (int i = 0; i < n; i++) + { + for (int j = 0; j < n; j++) + { + foutFloyd.Write($"{ansParallelFloyd[i, j]}{(j + 1 == n ? '\n' : ' ')}"); + } + } + foutKruskal.Write(ansParallelKruskal); + foutPrim.Write(ansParallelPrim); + foutFloyd.Close(); + foutKruskal.Close(); + foutPrim.Close(); + } + } +}