/// <summary> /// Поиск кратчайшего маршрута. Помещает его в BestCombinationArray /// </summary> public void GetBestRoute() { int n = QpointsOfRoute;//this.CountPointsOfRoute()+1; if (t == n - 1) { ChangeToRoute(); if (BestCombinationArray.Count == 0)//если еще не заполнен { BestCombinationArray.Add(ArrayPointsTemp); _bestCombinationArrayCount = this.BuildRouteByPoints(BestCombinationArray[0]).Count(); } else { CompareWithBestRoutes(); } //Route1._bestCombinationArray.Add(combinationArr); //Route1.b.Add(b1);//проверка } else { for (int j = t; j < n - 1; ++j) { int c = a[t];//обмен a[t] = a[j]; a[j] = c; t++; this.GetBestRoute(); //Рекурсивный вызов t--; int d = a[t]; a[t] = a[j]; a[j] = d; } } }
/// <summary> /// Сравнение маршрутов и отбор минимального /// </summary> /// <param name="CompareArr"></param> private void CompareWithBestRoutes() { int newroute = this.BuildRouteByPoints(ArrayPointsTemp).Count(); int bestroute = _bestCombinationArrayCount;//this.BuildRouteByPoints(BestCombinationArray[0]).Count(); if (newroute < bestroute) {//вставляем новое минимальное значение комбинации BestCombinationArray.Clear(); BestCombinationArray.Add(ArrayPointsTemp); _bestCombinationArrayCount = this.BuildRouteByPoints(BestCombinationArray[0]).Count(); } // применить при оценке конкурентных маршрутов // if (newroute == bestroute) // { // Route._bestCombinationArray.Add(ArrayPointsTemp); // } }