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);