C ++中的数据结构

时间:2015-10-26 17:16:48

标签: c++ algorithm adjacency-list

我正在研究一个问题并在C ++中实现一个算法。该算法需要一种数据结构,其中它类似于2D阵列(例如20x20阵列)。主要的不同是每个单元必须连接到它周围的八个邻域(即上,下,左,右和四个角)。

每个成员的状态将根据邻居的数据变化而变化。因此,每个细胞都会动态生长。每个小区都需要不断检查所有邻居的数据。

基于这个要求,我想这个数据结构是圆形的,就像圆环或百吉饼一样没有边缘,所以每个细胞都是相互连接的。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

问题陈述似乎不太清楚:

  

每个成员的状态将根据邻居的数据变化而变化。因此,每个细胞都会动态生长。每个小区都需要不断检查所有邻居的数据。

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

这个怎么样:我们有一个简单的1x4二维数组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

的定义