GPS навигатор в консольном приложении - C#

Узнай цену своей работы

Формулировка задачи:

Люди, прошу помощи. Я тут мозг себе ломаю об стену, уже не могу, как можно находить короткие пути как это делают в играх и в GPS навигаторах тоже. Вот код того, что я делал, но устал ужасно, это не выгодно как-то, но действует.
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;
    }
}
Делал этот код по этой картинке [смотреть картинку]. Еще раз скажу то, что код работает , но я себе мозг ломаю от этого кода, можно как-нибудь в 10 раз проще его сделать ?

Решение задачи: «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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы