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

时间:2013-09-25 10:46:39

标签: c++ opengl cellular-automata

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

每个单元格都有自己的id(颜色,例如绿色是id = 1)和flag isBorder(如果为真,则在pic上标记为白色)。我想要做的是排除一组带有边框(谷物)限制的单元格,这样我就可以分别处理每个谷物,这意味着我需要存储每个谷物的所有索引。

任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:1)

现在我再次阅读了你的问题......算法基本上与用颜色填充连续区域相同。最常见的方法是使用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
    });