【问题标题】:Generating All possible combination of 2D array by moving row通过移动行生成所有可能的二维数组组合
【发布时间】:2012-11-03 04:36:38
【问题描述】:

我们有一个大小为 NxN 的 2D 数组。我们选择任意行并将其向左或向右移动。就像如果一行是 "3 4 5 6" 我们可以将其向右移动 1 个单位以获得 "6 3 4 5" 。所以我必须使用如上所示的行移位从给定数组中打印所有可能的二维数组。

它的组合非常棘手,我反复尝试,但它对我来说太复杂了,所以我认为如果我们递归解决这个问题应该会更容易,但无论如何我都无法完成这个问题。我的班次没有问题,但我在生成所有可能的组合时遇到了问题。

This 是我发现的相关但不适用于我自己的问题。

【问题讨论】:

    标签: permutation combinations


    【解决方案1】:

    这似乎可以用嵌套的 for 循环来完成。假设您有一个函数可以移动二维数组中的一行,称为 rowShift(rowNum, rowOffset, &theArray)...

    int i1,i2,i3,i4;
    for(i4=0; i4 <= 3; ++i4) {
        for(i3=0; i3 <= 3; ++i3) {
            for(i2=0; i2 <= 3; ++i2) {
                for(i1=0; i1 <= 3; ++i1) {
                    rowShift(0, i1, theArray);
                }
                rowShift(1, i2, theArray);
            }
            rowShift(2, i3, theArray);
        }
        rowShift(3, i4, theArray);
    }
    

    如果你想保存每个组合,你需要在循环中的每个 rowShift 调用之后使用某种 saveState() 函数。

    我想您也可以将其作为递归函数来执行。

    我很好奇这是用来做什么的——如果你不介意分享的话。似乎是一个有趣的问题。 :)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2012-07-04
    • 2022-01-18
    • 1970-01-01
    • 2010-12-19
    • 2016-08-16
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多