我有一个大小为N*N的网格或2D数组。考虑一个6*6的数组,例如:
......
......
......
......
......
......
给定两个整数,高度和宽度。网格将被分割成如下大小的方框,例如3*3的方框,如下所示:
... ...
... ...
... ...
... ...
... ...
... ...
同样的6*6的网格也可以分成2*3的盒子,像这样:
... ...
... ...
... ...
... ...
... ...
... ...
以此类推。如果需要的话,可以假设给定的两个整数总是像上面那样均匀整齐地划分整个数组。问题是,当我有一个坐标或索引到数组时,我需要快速索引这个特定坐标的邻居。邻点是同一方框中的点。例如,如果盒子的大小为2*3,则(0,0)的邻居将是{(0,1),(0,2),(1,0),(1,1),(1,2)}。这似乎并不太难,但我无法想出任何简单的东西。我正在使用c++,但这是独立于语言的。
不尝试运行此算法…
在伪代码: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
}