|
|
@ -1,6 +1,6 @@ |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Diagnostics; |
|
|
|
using System.Diagnostics; |
|
|
|
|
|
|
|
using Combinatorics.Collections; |
|
|
|
using Combinatorics.Collections; |
|
|
|
|
|
|
|
using System.Collections.Generic; |
|
|
|
using static System.Console; |
|
|
|
using static System.Console; |
|
|
|
|
|
|
|
|
|
|
|
namespace predprs |
|
|
|
namespace predprs |
|
|
@ -37,46 +37,31 @@ namespace predprs |
|
|
|
Stopwatch sw = new Stopwatch(); |
|
|
|
Stopwatch sw = new Stopwatch(); |
|
|
|
sw.Start(); |
|
|
|
sw.Start(); |
|
|
|
|
|
|
|
|
|
|
|
List<Routes> bestResult = new List<Routes>(); |
|
|
|
HashSet<string> bestResult = new HashSet<string>(); |
|
|
|
bestResult.Add(new Routes { Inc = 0, Route = "" }); |
|
|
|
double best = 0; |
|
|
|
foreach (IList<int> v in variations) |
|
|
|
foreach (IList<int> 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]; |
|
|
|
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(); // отчистка листа при нахождении большего результата |
|
|
|
best = result; |
|
|
|
|
|
|
|
bestResult.Clear(); //отчистка листа при нахождении большего результата |
|
|
|
string bestStr = string.Format("[{0} {1} {2} {3} {4}]", v[0], v[1], v[2], v[3], v[4]); |
|
|
|
bestResult.Add(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 }); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
string answer = string.Empty; |
|
|
|
foreach (var route in bestResult) |
|
|
|
foreach (var route in bestResult) |
|
|
|
answer += route.Route + "\n"; |
|
|
|
answer += route + "\n"; |
|
|
|
|
|
|
|
|
|
|
|
sw.Stop(); |
|
|
|
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(); |
|
|
|
ReadKey(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class Routes |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public double Inc { get; set; } |
|
|
|
|
|
|
|
public string Route { get; set; } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|