c# все возможные комбинации чисел и идентифицировать каждый - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть рабочий код, который находит все возможные комбинации чисел, равные 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;
                        }
                    }
                }
            }
...