问题描述
我正在尝试找到遍历网格中所有相邻单元格的最有效方法。
例如,假设我有一个二维数组表示为:
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 ++做到这一点的最佳方法是什么?我最初的想法是进行广度优先搜索,有什么想法吗?
解决方法
这是迭代邻居的一种方法:
for (int i : {-1,1})
for (int j : {-1,1})
if (i && j)
std::cout << grid[x + i][y + j]; // prints all the neighbours
请确保还要考虑grid
的边缘。
这只是一种迭代邻居的可读方法。除非您已经测量了代码并发现该代码是性能瓶颈,否则不要担心效率。