static void Main(string[] args) { Graph g = new Graph(); string filename; int numOfChoice; while (true) { Console.Clear(); Console.Write("Program do wyznaczania optymalnego cyklu Hamiltona dla asymetrycznego problemu komiwojażera (ATSP)"); if (g.GetNumberOfCities() != 0) { Console.WriteLine("\n\nLiczba wierzchołków aktualnie wczytanego grafu: " + g.GetNumberOfCities()); Console.Write(Environment.NewLine); } else { Console.WriteLine("\n\nAktualnie nie wczytano żadnego grafu"); Console.Write(Environment.NewLine); } Console.WriteLine("Możliwości do wyboru: "); Console.WriteLine("1. Wczytaj małą macierz grafu"); Console.WriteLine("2. Wczytaj dużą macierz grafu"); Console.WriteLine("3. Wyświetl macierz kosztów"); Console.WriteLine("4. Rozwiąż problem komiwojażera za pomocą metody Brute Force"); Console.WriteLine("5. Rozwiąż problem komiwojażera za pomocą metody programowania dynamicznego"); Console.WriteLine("6. Przeprowadź testy seryjne"); Console.WriteLine("7. Zakończ działanie programu\n"); Console.Write("Którą opcję chcesz wybrać? Podaj numer: "); numOfChoice = int.Parse(Console.ReadLine()); switch (numOfChoice) { case 1: { Console.Clear(); Console.Write("Podaj nazwę pliku z małym grafem: "); filename = Console.ReadLine(); g = new Graph(filename, 0); Console.Write("Wczytano graf z " + g.GetNumberOfCities() + " wierzchołkami\nAby kontynuować kliknij [ENTER]"); Program.filename = filename; choice = 0; Console.ReadKey(); break; } case 2: { Console.Clear(); Console.Write("Podaj nazwę pliku z dużym grafem: "); filename = Console.ReadLine(); g = new Graph(filename, 1); Console.Write("Wczytano graf z " + g.GetNumberOfCities() + " wierzchołkami\nAby kontynuować kliknij [ENTER]"); Program.filename = filename; choice = 1; Console.ReadKey(); break; } case 3: { Console.Clear(); if (g.GetNumberOfCities() != 0) { g.DisplayCostMatrix(); } else { Console.WriteLine("Nie wczytano żadnego grafu do programu!"); } Console.Write("\nAby kontynuować kliknij [ENTER]"); Console.ReadKey(); break; } case 4: { BruteForce bf = new BruteForce(g.Filename, 0); // deklaracja początkowego wierzchołka bf.SetStartingVertex(0); bf.StartBruteForce(bf.GetStartingVertex()); Console.WriteLine("Najlepszy cykl ma wagę: " + bf.BestCycleCost); Console.WriteLine("Optymalny cykl:"); bf.Route.Display(); Console.WriteLine("\nKoniec. Aby wrócić do głównego menu, kliknij dowolny klawisz..."); Console.ReadKey(); break; } case 5: { DynamicProgramming dp = new DynamicProgramming(g.Filename, choice); // deklaracja początkowego wierzchołka dp.StartDynamicProgramming(0); Console.WriteLine("Najlepszy cykl ma wagę: " + dp.BestCycleCost); Console.WriteLine("Optymalny cykl:"); dp.Route.Display(); Console.WriteLine("\nKoniec. Aby wrócić do głównego menu, kliknij dowolny klawisz..."); Console.ReadKey(); break; } case 6: { Tests(); break; } case 7: { Console.Write("\nZakończono działanie programu\nAby kontynuować kliknij [ENTER]"); Console.ReadKey(); return; } } } }
static void Tests() { int repeats; int choiceNumber; Console.Clear(); Console.Write("Ile powtórzeń chciałbyś wykonać? Podaj liczbę: "); repeats = int.Parse(Console.ReadLine()); while (true) { Console.Clear(); Console.WriteLine("\nMożliwości do wyboru:\n"); Console.WriteLine("1. Brute Force"); Console.WriteLine("2. Programowanie dynamiczne"); Console.WriteLine("3. Powrót do głównego menu\n"); Console.Write("Którą opcję wybierasz? Wprowadź jej numer: "); choiceNumber = int.Parse(Console.ReadLine()); switch (choiceNumber) { case 1: { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); for (int i = 0; i < repeats; i++) { BruteForce bf = new BruteForce(filename, choice); bf.StartBruteForce(0); } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Console.WriteLine("\nŚredni czas wykonania algorytmu Brute Force wynosi " + ts.TotalMilliseconds / repeats + " ms"); Console.ReadKey(); break; } case 2: { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); for (int i = 0; i < repeats; i++) { DynamicProgramming dp = new DynamicProgramming(filename, choice); dp.StartDynamicProgramming(0); } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Console.WriteLine("\nŚredni czas wykonania metody programowania dynamicznego" + " wynosi " + ts.TotalMilliseconds / repeats + " ms"); Console.ReadKey(); break; } case 3: return; default: { Console.Clear(); Console.WriteLine("Taka opcja nie istnieje!"); Console.ReadKey(); break; } } } }