从 2D 数组中排除具有特定状态的字段;生命的游戏



我有一个数组 - 2D(在本例中为 100 x 100),某些状态限制在边界内,如图所示:http://tinypic.com/view.php?pic=mimiw5&s=5#.UkK8WIamiBI

每个单元格都有自己的id(颜色,例如绿色是id=1)和标志是边框(如果为真,则在图片上标记为白色)。我正在尝试做的是排除一组具有一个受边框(Grain)限制的状态的单元格集,这样我就可以单独处理每个谷物,这意味着我需要存储每个谷物的所有索引。

有人知道如何解决它吗?

现在我又读了你的问题...该算法本质上与用颜色填充连续区域相同。最常见的方法是BFS算法。

只需从您确定位于当前区域内的某个点开始,然后逐渐向各个方向移动,选择遍历的字段并将它们放入vector中。


编辑:在我理解这个问题之前提出的一堆其他见解。

我可以想象一个算法是这样工作的:

vector<2dCoord> result = data.filter(DataType::Green);
for (2dCoord in result) {
    // do some operations on data[2dCoord]
}

以简单的未优化方式实现filter是扫描整个数组并将匹配字段push_back向量。

如果需要更复杂的查询,延迟计算的代理对象可以创造奇迹:

data.filter(DataType::Green)
    .filter_having_neighbours(DataType::Red)
    .closest(/*first*/ 100, /*from*/ 2dCoord(x,y))
    .apply([](DataField& field) {
        // processing here
    });

相关内容

  • 没有找到相关文章

最新更新