diff --git a/predprs/Program.cs b/predprs/Program.cs index 9038ed0..15124d0 100644 --- a/predprs/Program.cs +++ b/predprs/Program.cs @@ -1,6 +1,6 @@ -using System.Collections.Generic; -using System.Diagnostics; +using System.Diagnostics; using Combinatorics.Collections; +using System.Collections.Generic; using static System.Console; namespace predprs @@ -37,46 +37,31 @@ namespace predprs Stopwatch sw = new Stopwatch(); sw.Start(); - List bestResult = new List(); - bestResult.Add(new Routes { Inc = 0, Route = "" }); + HashSet bestResult = new HashSet(); + double best = 0; foreach (IList v in variations) { - if (v[0] + v[1] + v[2] + v[3] + v[4] == 10) //проверка, если количество мешков 10 + if (v[0] + v[1] + v[2] + v[3] + v[4] == 10) //проверка, если количество мешков 10 { double result = matrix[v[0], 0] + matrix[v[1], 1] + matrix[v[2], 2] + matrix[v[3], 3] + matrix[v[4], 4]; - if (result > bestResult[0].Inc) //если найдено значение с бОльшей прибылью + if (result > best) //если найдено значение с бОльшей прибылью { - bestResult.Clear(); // отчистка листа при нахождении большего результата - - string bestStr = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - bestResult.Add(new Routes { Inc = result, Route = bestStr }); //добавление объекта в лист - } - else if (result == bestResult[0].Inc)// если количество прибыли одинаково - { - bool check = true; - string temp = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - foreach (var vr in bestResult) if (temp == vr.Route) check = false; //проверка на совпацение по маршруту - - if (check) - bestResult.Add(new Routes { Inc = result, Route = temp }); + best = result; + bestResult.Clear(); //отчистка листа при нахождении большего результата + bestResult.Add(string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4])); //добавление объекта в хешсет } + else if (result == best) + bestResult.Add(string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4])); //если количество прибыли одинаково } } string answer = string.Empty; foreach (var route in bestResult) - answer += route.Route + "\n"; + answer += route + "\n"; sw.Stop(); - WriteLine("Наибольшая прибыль при: \n{0}Cо значением {1}\n{2} ms", answer, bestResult[0].Inc, sw.ElapsedMilliseconds); + WriteLine("Наибольшая прибыль при: \n{0}Cо значением {1}\n{2} ms", answer, best, sw.ElapsedMilliseconds); ReadKey(); } - - class Routes - { - public double Inc { get; set; } - public string Route { get; set; } - } } -} - +} \ No newline at end of file