当前位置: 首页 > 知识库问答 >
问题:

int数组的对角线反射

宰父衡
2023-03-14

我想对布设在板中的int数组执行对角线反射,围绕对角线从左向右下降进行反射。这是一个尝试“翻转一个国际象棋棋盘周围”,同时与N皇后拼图。

    null
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]
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"

共有1个答案

曹旭
2023-03-14

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

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

示例矩阵上运行此循环将生成预期的

{0, 3, 1, 4, 2}
 类似资料:
  • 问题内容: 我有一个二维的numpy数组,具有相等数量的列和行。我想将它们排列成一个较大的数组,对角线上的数组较小。应该可以指定起始矩阵在对角线上的频率。例如: 因此,如果我希望此数组在对角线上2次,则期望的输出将是: 3次: 有没有一种快速的方法来使用numpy方法以及对于任意大小的起始数组(仍然考虑到起始数组具有相同的行数和列数)来实现这一点? 问题答案: 方法1 经典案例- 样品运行- 方法

  • 问题内容: 目前,我正在开发在8x8 2D阵列板上生成随机0和1的程序。我要做的是检查对角线上的所有数字是否都相同(从角开始,而不仅仅是对角线)。 例: 因此,如果偶然从左上角(0,0),(1,1)…(7,7)开始的所有数字均为0或1,那么我必须输出到扫描仪,指示“是0“的主要对角线(来自上面的示例)。 同样从该示例中,我们可以看到从右上角向左下角对角重复数字“ 1”,然后我还必须显示“有一个较小

  • 我正在尝试将我的对象[]数组映射并过滤到int[]数组。如果对象是int,效果很好,但如果不是int,则抛出强制转换异常。我想知道我是否可以在lambda表达式中附加一个try/catch?这是我的代码: 或者更好的方法是试着抓住整个街区?

  • 问题内容: 我有很多任意大小的数组。这是一个正方形阵列。我正在尝试掌握如何像a 而不是a 那样对角地遍历(我已经知道该怎么做)。到目前为止,我有以下代码: 我有三个循环,因为这是我做另一个对角线的方式: 在尝试中,我不断超越边界并获取ElementOutOfBounds异常。假设阵列如下(3x3而不是500x500): 我想将以下内容打印为字符串: 先前的SO问题对于整数数组也有类似的问题,解决方

  • 问题内容: 我试图在Java中反转一个int数组。 此方法不会反转数组。 怎么办 问题答案: 要反转一个int数组,可以交换项直到达到中点为止,如下所示: 这样,你将每个元素交换两次,因此结果与初始列表相同。

  • 问题内容: 以下代码将按 升序 对数组进行排序: 我需要 按降序 排序。如何使用比较器执行此操作? 请帮忙。 问题答案: 对于原始数组类型,您必须编写一个反向排序算法: 或者,您可以将转换为并编写比较器: 或使用,因为它仅适用于非原始数组类型。 最后,