У меня есть рабочий код, который находит все возможные комбинации чисел, равные 18. Я хочу реализовать его в своей программе. Проблема в том, что мне нужно идентифицировать каждое из этих чисел, потому что некоторые из них повторяются , затем программа работает с ними отдельно.
В частности, у меня есть набор весов и местоположений, к каждому местоположению прикреплен вес.
Мне нужно найти комбинацию этих местоположений, которая не превышайте определенный вес, а затем go им по одному.
Проблема в том, что если в двух местах вес такой же, как я его идентифицирую, то go сначала в одном месте и затем другому.
Большое спасибо!
int[] set = { 1, 2, 3, 1, 5, 6, 2}; //weights
foreach (string s in GetCombinations(set, 18, "")) //18 max weight
{
textBox1.Text += s + Environment.NewLine;
}
public static IEnumerable<string> GetCombinations(int[] set, int sum, string values)
{
for (int i = 0; i < set.Length; i++)
{
int left = sum - set[i];
string vals = set[i] + "," + values;
if (left == 0)
{
yield return vals;
}
else
{
int[] possible = set.Take(i).Where(n => n <= sum).ToArray();
if (possible.Length > 0)
{
foreach (string s in GetCombinations(possible, left, vals))
{
yield return s;
}
}
}
}