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

时间:2012-01-25 01:14:35

标签: c++ c arrays multidimensional-array

我正在做我的第一个算法(A * Pathfinding),其中一部分涉及检查与不同节点相邻的所有节点。有没有一种快速简便的方法可以做到这一点,还是必须为每个节点手动完成?

修改

邻近我的意思是:

每个X都与父节点O

相邻
XXX  
XOX  
XXX

1 个答案:

答案 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 == 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 */
    }
}

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

希望这有帮助!