两个数组的组合

时间:2018-12-15 08:53:18

标签: c# arrays

我有一个整数数组,它显示路径的节点:{1,2,3,4,5}
1-> 2-> 3-> 4-> 5

但是此路径的某些节点可以是可选的。 例如,节点4是可选的。 因此,我可以使用以下路径1-> 2-> 3-> 4-> 5 或此路径1-> 2-> 3-> 5到达我的目的地。

我想产生所有路径组合。 // ProduceCombinations(int [] path,int []可能的节点)

{1 *,2,3,4 *,5 *}

12345
-2345
123-5
-23-5
1234-
-234-
123--
-23--
12345
-2345
123-5
-23-5
1234-
-234-
123--
-23--

1 个答案:

答案 0 :(得分:0)

您在这里:

static void Main(string[] args)
        {
            int[] pathNodes = new int[] {1,2,3,4,5};
            int[] optionalNodes = new int[] { 1, 4, 5 };

            List<int[]> combies = ProduceCombinations(pathNodes, optionalNodes);

        }

        public static List<int[]> ProduceCombinations(int[] PathNodes, int[] OptionalNodes)
        {
            List<int[]> results = new List<int[]>();
            results.Add((int[])PathNodes.Clone());
            int index = 0;
            for (int j = 0; j < OptionalNodes.Length; j++)
            {
                while (PathNodes[index] < OptionalNodes[j]) index++;

                int lenght = results.Count;
                for(int i = 0; i < lenght; i++)
                {
                    var newSol = (int[])results[i].Clone();
                    newSol[index] = 0;
                    results.Add(newSol);
                }
            }

            return results;
        }