2015-10-26 85 views
1

我正在研究一个问题并在C++中实现一个算法。该算法需要一个数据结构,其中它类似于二维数组(例如20x20数组)。主要的不同之处在于每个细胞必须连接八个细胞周围(即上,下,左,右和四角)。C++中的数据结构

每个成员的状态将根据邻居的数据更改而改变。所以,每个细胞都在动态增长。每个小区都需要不断检查其所有邻居的数据。

基于这个要求,我想象这个数据结构是圆形的,就像一个没有边的圆环或百吉饼,这样每个单元就相互连接了。

关于这个数据结构表示的任何想法?我正在考虑使用邻接链表的列表,其中每个成员都包含周围八个邻居的链表。你怎么看?我在正确的轨道上吗?

+0

选择数据结构的标准之一是如何使用它。 –

+0

“我在正确的轨道上吗?”是。 – axiom

+0

我不确定是否有足够的信息可以帮助。在二维数组中寻找相邻的邻居看起来微不足道,即使你想包装边缘。 –

回答

2

寻找一个生命游戏的实现,它用零和一个做这个。除非通过将解决方案融合到每个迭代的一组约束来完成一些非常复杂的工作,否则每次都会遍历数组,并引用最后一代完整代码,并更新所有内容以在每个循环结束时创建新一代。

+0

谢谢,这正是我需要实现的。 – MLAC

+0

@MLAC那么接受答案。 :P –

+0

谢谢...我是新来的,不知道我需要点击复选标记才能接受。 – MLAC

1

这主要取决于你的问题,但我有关于邻接链表的怀疑。如果你的邻居动态增长,这样会更合适,但在这种情况下,它们似乎是固定的。所以你不妨使用一个指向你的邻居的数组。

1

问题声明似乎不是很清楚:

每个成员的状态将变为根据邻居的数据变化。所以,每个细胞都在动态增长。每个小区都需要不断检查其所有邻居的数据。

这实际上是什么意思?让我们假设只有一个值发生了变化。那么所有的邻居都应该改变,所有的邻居都会改变,直到所有的值都改变了。但是,如果原始价值改变后,它的邻居会发生变化,它是否会再次发生变化(并且无限期地变化 - 听起来像个坏主意)?

什么样:我们有1×4 2D阵列A B C D,其中A为B和d,以及A和C的B的邻居的一个简单的例子,等等

说变化。 B和D也应该如此。现在,C应该改变 - 是否应该根据B和D的变化立即改变?或B先,D秒?或者是什么?

是什么意思?constantlydynamically在您的问题的含义?是否有时间步骤,例如

time 1: a cell changes 
time 2: all immediate neighbours change simultaneously 
time 3: neighbours of immediate neighbours change 
     (and what about the original cell at this point?) 
time 4: etc. 

在大多数情况下,我(大多数其他)提供一个基于2D的阵列结构,但具有一个setter方法,其中,在调用时,会做变化传播原子。但它的确取决于你的定义constantlydynamically