gpt4 book ai didi

arrays - 当表示为一维数组时查找二维数组的邻居

转载 作者:行者123 更新时间:2023-12-01 04:05:54 25 4
gpt4 key购买 nike

我有一个二维数组,我将其转换为一维数组。在 1d 表示中,我怎样才能找到一个单元的所有 8 个邻居,以考虑环绕?

上下文是我有一个 2d 游戏板,我将它作为 1d 内存块存储在内存中。我需要能够找到游戏板中所有 8 个相邻单元格的内存位置。我遇到的问题是考虑边缘上的板环绕(特别是如果单元格位于二维数组的角落)。

例如,如果单元格位于右上角,则顶部邻居位于右下角等。

当我计算这个时,我知道电路板的大小。

编辑:提到我在 MIPS 汇编中这样做可能是相关的......

最佳答案

您只需要一个可以将任意位置映射到数组中包含的位置的函数。

您必须分两步分解问题:

  • 包装
  • 将二维坐标映射到一维

  • 使用模运算符可以轻松完成包装,例如
    struct pos { int x,y };

    pos wrap(pos p)
    {
    pos p2 = p;

    if (p.x >= WIDTH)
    p.x %= WIDTH;
    else if (p.x < 0)
    p.x += WIDTH;

    if (p.y >= HEIGHT)
    ... same thing
    }

    然后你会有一个肯定包含在数组中的位置,你需要将它映射到 1d,这更容易:
    int flatten(pos p)
    {
    return p.x*WIDTH + p.y;
    }

    所以你可以将它们组合起来:
    int fpos = flatten(wrap({30,20}));

    你就完成了。

    关于arrays - 当表示为一维数组时查找二维数组的邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355537/

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