我有一个大小为N * N的网格或二维数组。考虑一个6 * 6数组,如下所示:
......
......
......
......
......
......
我有两个整数,高度和宽度。网格将被划分为此大小的框,例如分为3 * 3框,如下所示:
... ...
... ...
... ...
... ...
... ...
... ...
同样的6 * 6网格也可以分成2 * 3个框,如下所示:
... ...
... ...
... ...
... ...
... ...
... ...
等等。如果重要的话,可以假设给出的两个整数总是如上所述均匀且整齐地划分整个阵列。问题是当我有一个坐标或索引到数组时,我需要快速索引这个特定坐标的邻居。邻居是同一个盒子里的点。例如,如果框的大小为2 * 3,则(0,0)的邻居将为{(0,1),(0,2),(1,0),(1,1),(1) ,2)}。这似乎并不太难,但我无法想出任何简单的东西。我使用的是C ++,但这与语言无关。
答案 0 :(得分:1)
没有尝试运行此算法...
在伪代码中:
list_of_points find_neighbours_of(x, y, height_of_box, width_of_box)
{
corner_x, corner_y = find_top_left_corner_of_box_containing(x, y)
iterate over corner_x to corner_x + height_of_box
iterate over corner_y to corner_y + width_of_box
if current_x and current_y <> x, y add them to list
}