gpt4 book ai didi

java - 绕 x 轴翻转一维阵列板表示

转载 作者:行者123 更新时间:2023-12-02 04:08:07 27 4
gpt4 key购买 nike

我正在编写国际象棋人工智能程序,并且在实现棋子方格表时遇到了问题。由于我只想每边有一张正方形 table ,因此我需要一个函数来翻转保存 x 轴值的一维数组。例如,这个数组:

[ 2, 4, 5,
3, 5, 0,
1, 4, 2]

将翻转为:

[ 1, 4, 2,
3, 5, 0,
2, 4, 5]

我使用以下方法使用嵌套循环为 0x64 数组实现了此目的(注意:示例仅为 3x3,但以下函数调整为 8x8);但是,我想知道是否有更有效的方法,因为时间是一个问题。

public int[] gridFromPerspective(int[] grid){

int[] flippedGrid = new int[64];

for(int i = 7; i < 32; i += 8){
for(int j = 0; j < 8; j++){
flippedGrid[i-j] = grid[63-(i-j)];
flippedGrid[63-(i-j)] = grid[i-j];
}
}
}

我知道您可以使用 sq' = sq ^ 56 轻松高效地翻转位板,但不确定如何在一维数组的情况下使用此技术。任何建议将不胜感激。

最佳答案

您使用的方法实际上并不是围绕 x 轴翻转板,而是整体旋转板。本质上,grid[0] 始终与 flippedGrid[63] 具有相同的值。如果您想从其他玩家的角度查看棋盘,这实际上是正确的,但是您可以将循环减少到

for (int i = 0; i < 64; i++) {
flippedGrid[i] = grid[63-i];
}

这应该会带来(非常)小的性能提升。

但是,如果您确实想绕 x 轴翻转板,则可以使用 System.arraycopy 来提高性能:

for (int i = 0; i < 8; i++) {
System.arraycopy(grid, 8*i, flippedGrid, 64 - 8*(i+1), 8);
}

这样,您就可以让 JVM 一次复制长度为 8(一行)的 block ,而不是复制单个值。

无论该方法应该做什么,您可能还需要考虑仅保留网格的翻转副本并适本地镜像更改。这样,您就无需旋转电路板,但代价是内存使用量更高(并且更难以编码和/或维护)。

关于java - 绕 x 轴翻转一维阵列板表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34056431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com