gpt4 book ai didi

c++ - 在开发国际象棋程序时,用给定的值初始化下面的方向数组有什么意义?

转载 作者:IT老高 更新时间:2023-10-28 11:53:35 24 4
gpt4 key购买 nike

我是竞争性编程的新手,我经常注意到,许多伟大的程序员在他们的代码中都有这四行代码(尤其是那些涉及数组的代码):

int di[] = { 1, -1, 0, 0, 1, -1, 1, -1 };
int dj[] = { 0, 0, 1, -1, 1, -1, -1, 1 };
int diK[] = { -2, -2, -1, 1, 2, 2, 1, -1 };
int djK[] = { -1, 1, 2, 2, 1, -1, -2, -2 };

这究竟意味着什么?技术的用途是什么?

最佳答案

这是一种将所有方向编码为数组的技术 - 每对 di[i],dj[i] 都是不同的方向。

如果我们想象我们在 x,y 位置有一 block 棋子,并且我们想将其 x 和 y 值相加以将其移动到附近的位置,1,0 是东,-1,0 是西, 0,1 是南,0,-1 是北,依此类推。

(这里我说左上角是 0,0,右下角是 4,4,并显示了数组的每个索引将从中心点 X 在 2,2 处的移动。)

.....
.536.
.1X0.
.724.
.....

它的设置方式,如果你在索引上执行 ^1 (^ 是按位异或)你会得到相反的方向 - 0 和 1 是相反的, 2 和 3 是相反的,依此类推。 (另一种设置方法是从北开始顺时针方向 - 然后 ^4 会为您提供相反的方向。)

现在您可以通过循环遍历您的 didj 数组来测试从给定点开始的所有方向,而不需要在自己的行上写出每个方向(例如总共八个!)(只是不要忘记进行边界检查:))

diKdjK 构成所有 knights directions而不是所有相邻的方向。这里,^1 将沿一个轴翻转,^4 将给出相反的骑士跳跃。

.7.6.
0...5
..K..
1...4
.2.3.

关于c++ - 在开发国际象棋程序时,用给定的值初始化下面的方向数组有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349925/

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