【问题标题】:Finding permutations on 2D array在二维数组上查找排列
【发布时间】:2020-02-05 22:55:01
【问题描述】:

我有一个这样的二维数组。

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}

我不知道如何生成上述所有组合。

非常感谢。

【问题讨论】:

  • 是数组数组还是真正的二维数组?
  • 如果你“不知道”那么你need to find a simpler problem。你能找到你的二维数组的所有组合而不需要选择每一列的数字吗?如果没有,你能找到一维数组的所有组合吗?发布您的代码。
  • 是真正的二维数组

标签: c# math multidimensional-array combinations combinators


【解决方案1】:

创建组合的典型方法是递归算法,每次切出一个元素并计算尾部的组合。

例如:

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));
    }

}

【讨论】:

  • @dakir08 如果对您有用,请将其标记为答案。
猜你喜欢
  • 2021-02-03
  • 2017-10-04
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多