【发布时间】:2016-06-11 10:37:41
【问题描述】:
我的目标是组合这些元素(每个字母代表不同的字符串)
A;B;F;...
X;C;D;...
P;O;K;...
...
以各种可能的方式在文本框中,不重复也不组合同一行的元素。点代表延续。所以如果矩阵只是
A;B
X;C
结果应该是 AX AC BX BC。如果是
A;B;F
X;C;D
P;O;K
结果将是 AXP AXO AXK ACP ACO ACK ADP ADO ADK BXP ....
我找到了一个算法
private void buildAllCombinationsRecursive<TSource>(IList<TSource> i_targetList, IList<TSource> i_sourceList, int i_currentPos)
{
if (i_currentPos == i_targetList.Count)
{
string combination = "";
for (int i = 0; i < i_targetList.Count; i++)
{
combination += i_targetList[i] + " ";
}
Console.WriteLine(combination);
return;
}
for (int i = 0; i < i_sourceList.Count; i++)
{
i_targetList[i_currentPos] = i_sourceList[i];
this.buildAllCombinationsRecursive(i_targetList, i_sourceList, i_currentPos + 1);
}
}
但它会创建一个我不需要的 ABC CBA 等。
【问题讨论】:
-
该算法可以工作,要执行您要求的操作,您必须在删除使用的行后将第一次迭代中生成的源列表发送到目标列表,这样它就会执行相同的过程这次是第 2 行。
-
@DanielNetzer Kannst du das als Code darsellen?
标签: c# combinations permutation combinatorics