首页 > 解决方案 > 检查所有相邻点的算法

问题描述

我试图找到遍历网格中所有相邻单元格的最有效方法。

例如,假设我有一个 2D 数组,表示为: vector <Item> grid;

我在这个网格中有一个点(由蓝色单元格表示): grid[x][y];

在此处输入图像描述

我希望它遍历所有相邻的坐标。

因此,例如,如果我的观点是 (1,1),它将能够遍历 (0,0) (0,1) (0,2) (1,0) (1,2) (2,0) (2 ,1) (2,2) 是围绕它的 8 个点(目前不包括 (x,y) 位于角落或网格边缘的情况)。

在 C++ 中执行此操作的最佳方法是什么?我最初的想法是做广度优先搜索,有什么想法吗?

标签: c++data-structures

解决方案


这是迭代邻居的一种方法:

for (int i : {-1, 0, 1})
  for (int j : {-1, 0, 1}) 
    if (i && j)
      std::cout << grid[x + i][y + j]; // prints all the neighbours

确保也考虑到边缘grid


这只是一种迭代邻居的可读方式。不要担心效率,除非您测量了代码并发现此代码是性能瓶颈。


推荐阅读