diff --git a/predprs/Program.cs b/predprs/Program.cs index 2a2cc95..28149ab 100644 --- a/predprs/Program.cs +++ b/predprs/Program.cs @@ -48,76 +48,85 @@ namespace predprs Variations variations = new Variations(data2, 5); //Permutations variations = new Permutations(data, GenerateOption.WithRepetition); - double result = 0, best = 0; - // string bestStr = string.Empty; + string bestStr = string.Empty; Stopwatch sw = new Stopwatch(); sw.Start(); - List resus = new List(); + //List resus = new List(); - List bestResult = new List(); - Results str = new Results(); - str.res = 0; - str.bestSt = string.Empty; + List bestResult = new List(); + bestResult.Add(new Routes { Inc = 0, Route = "" }); + //Results str = new Results(); + //str.Res = 0; + //str.BestSt = string.Empty; foreach (IList v in variations) { if (v[0] + v[1] + v[2] + v[3] + v[4] == 10) { - result = matrix[v[0], 0] + matrix[v[1], 1] + matrix[v[2], 2] + matrix[v[3], 3] + matrix[v[4], 4]; - if (result > str.res) + double result = matrix[v[0], 0] + matrix[v[1], 1] + matrix[v[2], 2] + matrix[v[3], 3] + matrix[v[4], 4]; + //result.CompareTo(bestResult[0].Inc); + if (result > bestResult[0].Inc) { // на всякий случай поля объекта делую нулевыми - str.res = 0; - str.bestSt = string.Empty; + //str.Res = 0; + //str.BestSt = string.Empty; bestResult.Clear(); // отчистка листа при нахождении большего результата //запись в поля объекта данных - str.res = result; - str.bestSt = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - bestResult.Add(str); //добавление объекта в лист - - //best = result; - //bestStr = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - + //str.Res = result; + 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 }); //добавление объекта в лист + + //best = result; + //bestStr = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); + } // если результаты совпали но строки отличаются (что-то тут странное происходит) - else if (result == str.res && str.bestSt != string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4])) + else if (result == bestResult[0].Inc)// && str.BestSt != string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4])) { // на всякий случай поля объекта делую нулевыми - str.res = 0; - str.bestSt = string.Empty; + //str.Res = 0; + //str.BestSt = string.Empty; + + 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 }); + } + + //запись в поля объекта данных - str.res = result; - str.bestSt = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - bestResult.Add(str);//добавление объекта в лист + //str.Res = result; + //str.BestSt = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); + //bestResult.Add(str);//добавление объекта в лист } - bool tr = false; - string r = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); - foreach (var vr in resus) if (r != vr) tr = true; - if (result == 5.4 && tr) - { - resus.Add(r); - tr = false; - } + //if (result == 5.4 && tr) + //{ + // resus.Add(r); + // tr = false; + //} //WriteLine("[{0} {1} {2} {3} {4}] {5}", v[0], v[1], v[2], v[3], v[4], result); //Thread.Sleep(100); } } - foreach (string s in resus) WriteLine(s); + //foreach (string s in resus) WriteLine(s); sw.Stop(); // вывод листа WriteLine(bestResult.Count); - foreach (Results strr in bestResult) + foreach (var route in bestResult) { - - WriteLine("Наибольшая прибыль при {0} со значением {1}", strr.bestSt, strr.res); + + WriteLine("Наибольшая прибыль при {0} со значением {1}", route.Inc, route.Route); } @@ -125,10 +134,10 @@ namespace predprs ReadKey(); } - class Results + class Routes { - public double res { get; set; } - public string bestSt { get; set; } + public double Inc { get; set; } + public string Route { get; set; } } } }