我正在做我的第一个算法(A * Pathfinding),其中一部分涉及检查与不同节点相邻的所有节点。有没有一种快速简便的方法可以做到这一点,还是必须为每个节点手动完成?
修改
邻近我的意思是:
每个X都与父节点O
相邻XXX
XOX
XXX
答案 0 :(得分:1)
你可以使用一个很好的双循环:
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 == x
和j == y
)或i != x
和j != 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 */
}
}
当然,在这两种情况下,你都应该确保自己处于世界的范围内,但由于我不知道这些是如何指定的,所以我会把它作为练习留给读者。 : - )
希望这有帮助!