首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int阵列的对角反射

int阵列的对角反射
EN

Stack Overflow用户
提问于 2014-04-08 16:40:23
回答 3查看 2.1K关注 0票数 0

我想要在板中布局的int数组上执行对角线反射,从左向右下降,在对角线周围反射。这是一种在与皇后之谜合作的同时,“翻转棋盘”的尝试。

  • 数组显示在大小为n*n的板上。
  • 数组的长度是n
  • 数组的索引表示行(即arr[0]表示顶部行)
  • 索引处的值表示女王的水平位置(即arr[2] = 3;表示“在第3行的第4列放置女王”(基于零的索引))。

示例

代码语言:javascript
复制
int[] matrix = {0,2,4,1,3};

将显示为

代码语言:javascript
复制
[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]

在运行命令之后

代码语言:javascript
复制
matrix = diagonalReflection(matrix);

矩阵应该如下所示(注意,反射是基于下降的对角线)。

代码语言:javascript
复制
[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种不同的方法,但这是我目前正在使用的方法:

代码语言:javascript
复制
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;
}

职能说明:

代码语言:javascript
复制
Board.get(x) means "return arr[x]"
Board.set(x, y) means "arr[x] = y"
EN

回答 3

Stack Overflow用户

发布于 2014-04-08 16:46:39

由于int[] matrix变量是置换变量,所以可以使用简单的for循环构建反射,如下所示:

代码语言:javascript
复制
int[] reflected = new int[matrix.length];
for (int i = 0 ; i != matrix.length ; i++) {
    reflected[matrix[i]] = i;
}

在示例matrix上运行此循环将生成预期的

代码语言:javascript
复制
{0, 3, 1, 4, 2}
票数 2
EN

Stack Overflow用户

发布于 2014-04-08 16:48:15

你想要产生的东西,叫做矩阵的转置。在数学上,您可以通过交换行和列来实现这一点,所以

代码语言:javascript
复制
[1 2 3]
[4 5 6]
[7 8 9] 

变成了

代码语言:javascript
复制
[1 4 7]
[2 5 8]
[3 6 9]

就程序而言,逻辑是:

代码语言:javascript
复制
new_matrix[i][j]=old_matrix[j][i];
票数 0
EN

Stack Overflow用户

发布于 2014-04-08 16:49:27

如果我正确理解了你想要的,我想这就是你想要的:

代码语言:javascript
复制
public int[] diagonalReflexion(int[] matrix) {
  int[] result = new int[matrix.length];
  for (int i=0; i<matrix.length; i++) {
    result[matrix[i]] = i;
  }
  return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22943181

复制
相关文章

相似问题

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