java - int 数组的对角反射

标签 java arrays algorithm

我想对布置在板上的 int 数组执行对角线反射,围绕从左到右下降的对角线进行反射。这是在使用 N queens puzzle 时“翻转棋盘”的尝试。 .

  • 数组显示在大小为 n*n
  • 的板上
  • 数组的长度为n
  • 数组的索引代表行(即arr[0]表示第一行)
  • 索引处的值表示皇后的水平放置(即 arr[2] = 3; 表示“将皇后放在第 3 行的第 4 列”(从零开始的索引) )

例子

int[] matrix = {0,2,4,1,3};

将显示为

[Q x x x x]
[x x Q x x]
[x x x x Q]
[x Q x x x]
[x x x Q x]

运行命令后

matrix = diagonalReflection(matrix);

矩阵应该是这样的(注意,反射是基于降对角线的)

[Q x x x x]
[x x x Q x]
[x Q x x x]
[x x x x Q]
[x x Q x x]

我将如何相应地交换元素以实现此结果?

更新:
我可能尝试了 5-10 种不同的方法,但这是我目前使用的方法:

public static Board diagonalReflection(Board src){

    int n = src.size();
    Board dest = new Board(n);

    for (int i = 0; i < n; i++)
        dest.set(src.get(i), i);

    return dest;
}

功能说明:

Board.get(x) means "return arr[x]"
Board.set(x, y) means "arr[x] = y"

最佳答案

由于您的 int[] 矩阵 变量是一个排列,您可以使用简单的 for 循环构建反射,如下所示:

int[] reflected = new int[matrix.length];
for (int i = 0 ; i != matrix.length ; i++) {
    reflected[matrix[i]] = i;
}

在您的示例矩阵 上运行此循环会产生预期的结果

{0, 3, 1, 4, 2}

关于java - int 数组的对角反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943181/

相关文章:

java - hibernate、stackoverflow 与特定实体映射

java - tomcat如何下载maven依赖?

对 getChar 和 printf 的调用似乎修改了不相关的数据

java - 高 GC、CPU Activity 和元空间似乎没有增加,Web 应用程序执行变得无响应

java - 需要帮助设计 'Find my IPhone' 式的应用程序

algorithm - 如何计算图像适合其容器的最佳比例?

algorithm - 快速计算 x ^ (1/y) mod m(模根)

java - 如何在 java 中创建我们自己的 O(1) 子字符串函数,就像在 jdk 6 中一样。

arrays - GraphQL 过滤器内容丰富的帖子

java - 可被 3 整除的数字递归