gpt4 book ai didi

c++ - 访问与某个位置直接相邻的多维数组中的所有位置?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:29 24 4
gpt4 key购买 nike

我正在做我的第一个算法(A* 寻路),其中一部分涉及检查与不同节点相邻的所有节点。是否有快速简便的方法来执行此操作,还是必须为每个节点手动完成?

编辑:

相邻是指:

每个X都与父节点O相邻

XXX  
XOX
XXX

最佳答案

您可以使用一个很好的双循环:

for (int i = x - 1; i <= x + 1; i++) {
for (int j = y - 1; j <= y + 1; j++) {
/* Skip the point itself! */
if (i == x && j == y) continue;

/* Process the location here */
}
}

这也可以概括为只考虑主方向相邻的点(即直接上/下/左/右)。为此,您使用对上述 for 循环的修改,在该循环中访问所有八个邻居,但随后跳过以下任一点

  • 与你所在的位置相同(i == xj == y),或者
  • x 和 y 都不与起点相同(i != xj != y)

有趣的是,上述两个测试可以合并为一行:((i == x) == (j == y))。这将测试两个值是否相同(您在开始的同一位置)或两个值是否不同(您在对角线上):

for (int i = x - 1; i <= x + 1; i++) {
for (int j = y - 1; j <= y + 1; j++) {
if ((i == x) == (j == y)) continue;

/* Process the location here */
}
}

当然,在这两种情况下,您都应该确保您在世界范围内,但由于我不知道这些是如何指定的,所以我将把它作为练习留给读者。 :-)

希望这对您有所帮助!

关于c++ - 访问与某个位置直接相邻的多维数组中的所有位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996722/

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