【发布时间】:2016-07-16 10:42:45
【问题描述】:
我将 3D 空间的一部分划分为一系列 1x1x1 的立方体,该部分的体积可能为 100^3 到 1000^3,但是,我真正感兴趣的立方体/单元很少超过 5000 -20000 他们的人数。
我要做的是找到所有满足我标准的单元格/立方体,与所选单元相邻。但是,我不确定哪种算法最适合此类任务。我想到的第一件事是使用常规的洪水填充算法,但出现了以下问题:我必须存储有关工作区域中所有单元格的信息,正如我所说,它可能有多达 1000^3 个元素,但我需要的只有5000-20000。
所以说我的问题是:
- 如果我应该使用洪水填充,是否有任何数据结构可以用于我的情况?
- 如果我不应该使用洪水填充,我应该怎么做?
【问题讨论】:
-
我猜想最有效的方法将取决于选择包含哪些单元格的实际标准。标准是什么?
-
嗯...标准是气体密度,但我的具体任务要求我选择与其侧面相邻的单元格。
-
如果您的标准可以在每个访问的单元格上独立且有效地计算,那么您可以对感兴趣的单元格使用您喜欢的任何结构(例如
vector)。但是 - 您是否有任何特定的顺序可以稍后处理感兴趣的细胞?如果是这样 - 您只需要确保从一开始就按预期顺序将感兴趣的单元格加载到容器中 -
不,顺序根本不重要,是的,我可以独立计算标准。但是,问题是我必须跟踪所有访问过的单元格,以防止再次回到那里。我当前的实现由向量组成,其中每个访问的单元格都已添加,还有一个单元格队列,其相邻单元格尚未添加。起初它工作得很好,但是随着向量中元素数量的增加,性能会随着时间的推移而下降,因此检查队列中附近元素是否已经添加的计算时间也会下降。
-
您可以将所有访问过的单元格存储在
set<pair<int, int> >中,以显着加快检查单元格是否已被访问过。
标签: c++ algorithm search flood-fill