c++ - 检查所有相邻点的算法
问题描述
我试图找到遍历网格中所有相邻单元格的最有效方法。
例如,假设我有一个 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++ 中执行此操作的最佳方法是什么?我最初的想法是做广度优先搜索,有什么想法吗?
解决方案
这是迭代邻居的一种方法:
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
。
这只是一种迭代邻居的可读方式。不要担心效率,除非您测量了代码并发现此代码是性能瓶颈。
推荐阅读
- twilio - 将自定义参数传递给 Twilio API 的问题
- powershell - 如何将源路径列表中定义的文件复制到cmd或powershell中的输出路径列表?
- swift - Swift 5 thumbnailImageForActivityType 方法未调用
- bash - 两种模式之间的 Grep 线,一种独特,一种重复
- c++ - 如何使用 DeviceIOControl 将键盘按下发送到视频游戏?
- python - 为 HTTP 方法实现不同的序列化策略
- java - Eclipse 在导入项目时抛出 Gradle 错误
- json - 在谷歌浏览器主题 manifest.json 中更改多功能框中的突出显示颜色
- r - 如果 A 列和 B 列在 C 列中有多个对应值,则删除行
- python - 从列表中抓取后无法操作字符串