Поиск кратчайшего пути - C# (181681)

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

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

В одном массиве даны все возможные комбинации чисел (0,1,2,3,4). Представляют собой города. В другом массиве - расстояния между этими городами.

Решение задачи: «Поиск кратчайшего пути»

textual
Листинг программы
  1.  class Program
  2.     {
  3.         public static double[,] ArrayDistance;
  4.         static void Main(string[] args)
  5.         {
  6.             List<String> city=new List<string>();
  7.             String line = String.Empty;
  8.             do
  9.             {
  10.                 Console.Clear();
  11.                 Console.WriteLine("В списке {0} городов, введите название города: ",city.Count);
  12.                 line = Console.ReadLine();
  13.                 if(line!="")
  14.                     city.Add(line);
  15.             } while (line!="");
  16.             if (city.Count < 3)
  17.             {
  18.                 Console.Clear();
  19.                 Console.WriteLine("В списке должно быть не менее трех городов!");
  20.                 Console.ReadLine();
  21.                 return;
  22.             }
  23.            
  24.             ArrayDistance=new double[city.Count,city.Count];
  25.             ClearTo(ref ArrayDistance,-1);
  26.             for (int i = 0; i < city.Count; i++)
  27.             {
  28.                 ArrayDistance[i, i] = 0;
  29.             }
  30.             for (int i = 0; i < city.Count; i++)
  31.             {
  32.                 for (int j = 0; j < city.Count; j++)
  33.                 {
  34.                     if (ArrayDistance[i, j] == -1)
  35.                     {
  36.                         try
  37.                         {
  38.                             Console.Clear();
  39.                             Console.WriteLine("Введите расстояние между {0} и {1}:",city[i],city[j]);
  40.                             String dist = Console.ReadLine();
  41.                             if (dist != null)
  42.                             {
  43.                                 double distance = Double.Parse(dist);
  44.                                 ArrayDistance[i, j] = distance;
  45.                                 ArrayDistance[j, i] = distance;
  46.                             }
  47.                         }
  48.                         catch (Exception)
  49.                         {
  50.                             Console.Clear();
  51.                             Console.WriteLine("Вы ввели не правильное число. Работа программы прекращена.");
  52.                             Console.ReadLine();
  53.                             return;
  54.                         }
  55.  
  56.  
  57.                     }
  58.                 }
  59.             }
  60.             Console.Clear();
  61.             Console.WriteLine("Ниже приведен список городов: ");
  62.             for (int i = 0; i < city.Count; i++)
  63.             {
  64.                 Console.WriteLine("{0} - {1}",i,city[i]);
  65.             }
  66.             String count_route = (city.Count - 1).ToString();
  67.             Console.WriteLine("Выберите из какого города стартует маршрут (0-{0}) : ", count_route);
  68.             String from_string = Console.ReadLine();
  69.             Console.WriteLine("Выберите в какой город просчитать маршрут (0-{0}) : ",(city.Count-1));
  70.             String to_string = Console.ReadLine();
  71.             int from = 0;
  72.             int to = 0;
  73.             try
  74.             {
  75.                 from = Int32.Parse(from_string);
  76.                 to = Int32.Parse(to_string);
  77.                 if(from>(city.Count-1) && to>(city.Count-1))
  78.                     throw new Exception();
  79.                 if (from == to)
  80.                 {
  81.                     Console.Clear();
  82.                     Console.WriteLine("Расстояние между городами 0км.");
  83.                     Console.ReadLine();
  84.                     return;
  85.                 }
  86.             }
  87.             catch (Exception)
  88.             {
  89.                 Console.Clear();
  90.                 Console.WriteLine("Вы ввели не правильное число. Работа программы прекращена.");
  91.                 Console.ReadLine();
  92.                 return;
  93.             }
  94.  
  95.  
  96.             Console.Clear();
  97.             Console.WriteLine("Поиск кратчайшего пути...");
  98.             double result=SearchShortWay(from,to,new List<int>());
  99.             Console.WriteLine("Растояние между {0} и {1} = {2}", city[from], city[to], result);
  100.             Console.ReadLine();
  101.  
  102.         }
  103.  
  104.         public static void ClearTo(ref double[,] array, int val)
  105.         {
  106.             for (int i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++)
  107.             {
  108.                 for (int j = array.GetLowerBound(1); j <= array.GetUpperBound(1); j++)
  109.                 {
  110.                     array[i, j] = val;
  111.                 }
  112.             }
  113.         }
  114.  
  115.         public static double SearchShortWay(int index_from, int index_to, List<int> used_city)
  116.         {
  117.             double result = 0;
  118.             List<double> shortway=new List<double>();
  119.             for (int i = 0; i < ArrayDistance.GetLength(0); i++)
  120.             {
  121.                 bool flag = false;
  122.                 foreach (int index in used_city)
  123.                 {
  124.                     if (i == index)
  125.                         flag = true;
  126.                 }
  127.                 if(flag)
  128.                     continue;
  129.                 if(i==index_from)
  130.                     continue;
  131.                 //List<int> used_city_temp=new List<int>();
  132.                 if (i != index_to)
  133.                 {
  134.                     double part_way=ArrayDistance[index_from, i];
  135.                     used_city.Add(index_from);
  136.                     shortway.Add(part_way + SearchShortWay(i, index_to, used_city));
  137.                 }
  138.                 else
  139.                 {
  140.                    shortway.Add(ArrayDistance[index_to,index_from]);
  141.                 }
  142.             }
  143.             result = shortway.Min();
  144.             return result;
  145.         }
  146.     }

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


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

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

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы