我有一个整数数组,它显示路径的节点:{1,2,3,4,5}
1-> 2-> 3-> 4-> 5
但是此路径的某些节点可以是可选的。 例如,节点4是可选的。 因此,我可以使用以下路径1-> 2-> 3-> 4-> 5 或此路径1-> 2-> 3-> 5到达我的目的地。
我想产生所有路径组合。 // ProduceCombinations(int [] path,int []可能的节点)
12345
-2345
123-5
-23-5
1234-
-234-
123--
-23--
12345
-2345
123-5
-23-5
1234-
-234-
123--
-23--
答案 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;
}