在二维数组上查找排列
Finding permutations on 2D array
我有一个这样的二维数组。
1 2 3
2 3 4
有没有办法找到所有满足以下要求的组合?
我想找到所有的组合,例如必须选择一列中的每个数字。
比如
{1,2,3}
{1,2,4}
{1,3,3}
{1,3,4}
{2,2,3}
{2,2,4}
{2,3,3}
{2,3,4}
我不知道如何生成上面所有的组合。
非常感谢。
创建组合的典型方法是递归算法,每次切掉一个元素并计算尾部的组合。
例如:
public static IEnumerable<IEnumerable<int>> Combinations (int[,] array, int column)
{
if (column == array.GetLength(1))
{
yield return Enumerable.Empty<int>();
yield break;
};
for(int j=0; j < array.GetLength(0); j++)
{
int v = array[j, column];
var first = new List<int>{ v };
foreach (var combination in Combinations(array, column+1))
{
yield return first.Concat(combination);
}
}
}
public static void Main()
{
int [,] a = new int [2,3] {
{1, 2, 3} ,
{2, 3, 4} ,
};
var result = Combinations(a, 0);
foreach (var t in result)
{
Console.WriteLine(string.Join(",", t));
}
}
我有一个这样的二维数组。
1 2 3
2 3 4
有没有办法找到所有满足以下要求的组合?
我想找到所有的组合,例如必须选择一列中的每个数字。
比如
{1,2,3}
{1,2,4}
{1,3,3}
{1,3,4}
{2,2,3}
{2,2,4}
{2,3,3}
{2,3,4}
我不知道如何生成上面所有的组合。
非常感谢。
创建组合的典型方法是递归算法,每次切掉一个元素并计算尾部的组合。
例如:
public static IEnumerable<IEnumerable<int>> Combinations (int[,] array, int column)
{
if (column == array.GetLength(1))
{
yield return Enumerable.Empty<int>();
yield break;
};
for(int j=0; j < array.GetLength(0); j++)
{
int v = array[j, column];
var first = new List<int>{ v };
foreach (var combination in Combinations(array, column+1))
{
yield return first.Concat(combination);
}
}
}
public static void Main()
{
int [,] a = new int [2,3] {
{1, 2, 3} ,
{2, 3, 4} ,
};
var result = Combinations(a, 0);
foreach (var t in result)
{
Console.WriteLine(string.Join(",", t));
}
}