用Java交换数组中的三元组

时间:2019-07-17 04:52:46

标签: java multidimensional-array swap

我正在尝试用Java实现以下过程。我有一个数组,其中每个元素是一个三元组。例如:

Enter your first binary digit: 5
ERROR: You must enter a binary digit.
Enter your first binary digit:

我想交换数组中的每个三元组(其他三元组在他们的右手),以便获得以下每个矩阵:

int [][] a = { {0,1,0},{1,2,1},{1,0,0},{0,2,0} };

通常,对于一个由三元组组成的矩阵,存在[(k *(k-1))/ 2]个可能的交换。

我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

双重嵌套循环应该在这里工作。请注意,您要求的输出实际上是3D数组(2D数组的数组):

public int[][] copy2DArray (int[][] input) {
    int[][] output = new int[input.length][];
    for (int r=0; r < input.length; ++r) {
        output[r] = new int[input[r].length];
        for (int c=0; c < input[0].length; ++c) {
            output[r][c] = input[r][c];
        }
    }

    return output;
}

public static void main(String[] args) {
    int [][] a = { {0,1,0},{1,2,1},{1,0,0},{0,2,0} };
    int numSwaps = a.length*(a.length-1) / 2;
    int[][][] result = new int[numSwaps][][];

    int counter = 0;
    for (int i=0; i < a.length-1; ++i) {
        for (int j=i+1; j < a.length; ++j) {
            result[counter] = copy2DArray(a);
            int[] temp = result[counter][j];
            result[counter][j] = result[counter][i];
            result[counter][i] = temp;
            ++counter;
        }
    }

    System.out.println(Arrays.deepToString(result));
}

此打印:

[
    [[1, 2, 1], [0, 1, 0], [1, 0, 0], [0, 2, 0]],
    [[1, 0, 0], [1, 2, 1], [0, 1, 0], [0, 2, 0]],
    [[0, 2, 0], [1, 2, 1], [1, 0, 0], [0, 1, 0]],
    [[0, 1, 0], [1, 0, 0], [1, 2, 1], [0, 2, 0]],
    [[0, 1, 0], [0, 2, 0], [1, 0, 0], [1, 2, 1]],
    [[0, 1, 0], [1, 2, 1], [0, 2, 0], [1, 0, 0]]
]

有些笔记,我过去的策略是使用两级for循环遍历所有头寸交换头寸。对于每个可能的交换,我们首先克隆您的输入2D a数组。然后,我们在选择的任何位置交换单个1D阵列。最后,我们将交换后的数组添加到3D结果数组中。我们还可以使用诸如列表之类的东西来存储交换后的2D数组。