GPS навигатор в консольном приложении - C#
Формулировка задачи:
Люди, прошу помощи. Я тут мозг себе ломаю об стену, уже не могу, как можно находить короткие пути как это делают в играх и в GPS навигаторах тоже. Вот код того, что я делал, но устал ужасно, это не выгодно как-то, но действует.
Делал этот код по этой картинке [смотреть картинку]. Еще раз скажу то, что код работает , но я себе мозг ломаю от этого кода, можно как-нибудь в 10 раз проще его сделать ?
using System; using System.Threading; class Program { static void Main() { back: int i; //Основной путь //------------------------- const int SHS_to_RSS = 12; const int RSS_to_MVS = 3; const int MVS_to_BHS = 19; const int BHS_to_BAS = 20; const int BAS_to_OMS = 27; //------------------------- //Побочный путь //------------------------- const int RSS_to_OMS = 16; const int RSS_to_BHS = 23; Console.Title = "GPS http://www.cyberforum.ru"; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tGPS от irineyxxx"); string[] NamesOfStations = {"Станция Высушенная Голова", "Станция Жаренный Лосось", "Станция Маньяки и Водочники", "Станция Черный Молот", "Станция Кровавый Выкидыш", "Станция Древний Мутант"}; for (i = 0; i < NamesOfStations.Length; i++) { Console.WriteLine((i + 1) + ": " + NamesOfStations[i]); } try { Console.WriteLine(); Console.Write("Выберите соответствующую цифру для начала пути А: "); Console.ForegroundColor = ConsoleColor.DarkGreen; int A = int.Parse(Console.ReadLine()); Console.ForegroundColor = ConsoleColor.Green; if (A == 1) Console.WriteLine("A: " + NamesOfStations[0]); else if (A == 2) Console.WriteLine("A: " + NamesOfStations[1]); else if (A == 3) Console.WriteLine("A: " + NamesOfStations[2]); else if (A == 4) Console.WriteLine("A: " + NamesOfStations[3]); else if (A == 5) Console.WriteLine("A: " + NamesOfStations[4]); else if (A == 6) Console.WriteLine("A: " + NamesOfStations[5]); else { Console.WriteLine("Ввод некорректен. Превышен диапозон значений."); Thread.Sleep(1500); Console.Clear(); goto back; } Console.Write("Выберите соответствующую цифру для конца пути B: "); Console.ForegroundColor = ConsoleColor.DarkGreen; int B = int.Parse(Console.ReadLine()); Console.ForegroundColor = ConsoleColor.Green; if (B == 1) Console.WriteLine("B: " + NamesOfStations[0]); else if (B == 2) Console.WriteLine("B: " + NamesOfStations[1]); else if (B == 3) Console.WriteLine("B: " + NamesOfStations[2]); else if (B == 4) Console.WriteLine("B: " + NamesOfStations[3]); else if (B == 5) Console.WriteLine("B: " + NamesOfStations[4]); else if (B == 6) Console.WriteLine("B: " + NamesOfStations[5]); else { Console.WriteLine("Ввод некорректен. Превышен диапозон значений."); Thread.Sleep(1500); Console.Clear(); goto back; } if (B == A) { Console.WriteLine("Введённые данные не соответствуют стандартам реализации."); Thread.Sleep(1500); Console.Clear(); goto back; } Thread.Sleep(500); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Начиную путь..."); Console.ForegroundColor = ConsoleColor.Green; //---------------------------------------------------------------------- //НАЧАЛО А1 if (A == 1 & B == 2) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[1] + " = " + SHS_to_RSS + " км."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS); } else if (A == 1 & B == 3) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[2] + " = " + (SHS_to_RSS+RSS_to_MVS) + " км."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS); } else if (A == 1 & B == 4) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[3] + " = " + (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS) + " км."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS); } else if (A == 1 & B == 5) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[4] + " = " + (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS) + " км."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS); } else if (A == 1 & B == 6) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " + (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS + BAS_to_OMS) + " км,"); Console.WriteLine("если проходить его длинным путем."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS + " " + BAS_to_OMS + " = этот путь длинный."); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " + (SHS_to_RSS + RSS_to_MVS + BAS_to_OMS) + " км,"); Console.WriteLine("если проходить его коротким путем."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + BAS_to_OMS + " = этот путь короткий."); } //--------------------------------------------------------------------КОНЕЦ А1 else if (A == 2 & B == 1) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[0] + " = " + SHS_to_RSS + " км."); Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS); } else if (A == 2 & B == 3) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[2] + " = " + RSS_to_MVS + " км."); Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS); } else if (A == 2 & B == 4) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[3] + " = " + (RSS_to_MVS + MVS_to_BHS) + " км."); Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS); } else if (A == 2 & B == 5) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[4] + " = " + (RSS_to_MVS + MVS_to_BHS + BHS_to_BAS) + " км."); Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS); } else if (A == 2 & B == 6) { Console.WriteLine("Путь найден."); Thread.Sleep(500); Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[5] + " = " + (RSS_to_MVS + MVS_to_BHS + BHS_to_BAS + BAS_to_OMS) + " км."); Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS + " " + BAS_to_OMS); } } catch (Exception e) { Console.WriteLine("Invalid variable. " + e); Thread.Sleep(1500); Console.Clear(); goto back; } Console.WriteLine(); Console.WriteLine("Нажмите любую клавишу для повторного вычисления пути."); Console.ReadKey(); Console.Clear(); goto back; } }
Решение задачи: «GPS навигатор в консольном приложении»
textual
Листинг программы
static void Main(string[] args) { int[,] L ={ {-1, 5, -1, -1, -1, 3, -1, -1}, { 5, -1, 2, -1, -1, -1, 3, -1}, {-1, 2, -1, 6, -1, -1, -1, 10}, {-1, -1, 6, -1, 3, -1, -1, -1}, {-1, -1, -1, 3, -1, 8, -1, 5}, { 3, -1, -1, -1, 8, -1, 7, -1}, {-1, 3, -1, -1, -1, 7, -1, 2}, {-1, -1, 10, -1, 5, -1, 2, -1} }; Dijkstra clss = new Dijkstra((int)Math.Sqrt(L.Length),L);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д