首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩阵列组合的c#递推

矩阵列组合的c#递推
EN

Stack Overflow用户
提问于 2016-06-13 18:25:44
回答 1查看 164关注 0票数 0

我有带K群的MxN矩阵。组是一组列。如何生成一个组的列与另一个组的列的组合?

例如,2x4矩阵,组大小-2列(1,2 -第一,3,4 -秒)

我得到了组合

1-3

1-4

2-3

2-4

在这种情况下,我可以使用多个循环。

代码语言:javascript
运行
复制
for (int i = 0; i < 2; i++)
    for (int j = 2; j < 4; j++)
        Console.WriteLine("{0} - {1}", i, j);

3组和2x6矩阵的情况如何?

代码语言:javascript
运行
复制
for (int i = 0; i < 2; i++)
    for (int j = 2; j < 4 ; j++)
        for (int k = 4; k < 6; k++)
            Console.WriteLine("{0} - {1} - {2}", i, j, k);

其他案子怎么样?如何组织循环/递归?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 20:30:40

对于这个问题中的边情况和行的作用不确定,但是对于简单的情况,您提供的这种方法会起作用:

代码语言:javascript
运行
复制
    static void Main()
    {
        var columns = 6;
        var groupSize = 2;

        var groups = GetGroups(columns, groupSize).ToArray();

        var groupCurrentIndex = Enumerable.Range(0, groups.Length).ToDictionary(i => i, i => 0);
        var maxIndex = groupSize - 1;

        while (true)
        {
            var combination = groups.Select((g, i) => g[groupCurrentIndex[i]]);
            PrintCombination(combination);

            var incrementedGroupIndex = false;
            for (var i = groups.Length - 1; i > 0; i--)
            {
                if (groupCurrentIndex[i] != maxIndex)
                {
                    groupCurrentIndex[i]++;
                    incrementedGroupIndex = true;
                    break;
                }
                if (groupCurrentIndex[i] == maxIndex && groupCurrentIndex[i - 1] != maxIndex)
                {
                    groupCurrentIndex[i-1]++;
                    incrementedGroupIndex = true;

                    for (var j = i; j < groups.Length; j++)
                    {
                        groupCurrentIndex[j] = 0;
                    }
                    break;
                }
            }
            if (!incrementedGroupIndex)
            {
                break;
            }
        }

        Console.ReadLine();
    }

    private static IEnumerable<int[]> GetGroups(int columns, int groupSize)
    {
        for (var startIndex = 0; startIndex < columns; startIndex = startIndex + groupSize)
        {
            yield return Enumerable.Range(startIndex, groupSize).ToArray();
        }
    }

    private static void PrintCombination(IEnumerable<int> combination)
    {
        Console.WriteLine(string.Join(" - ", combination));
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37796717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档