C++ 中的数据结构
Data Structure in C++
我正在研究一个问题并用 C++ 实现一个算法。该算法需要一个类似于二维数组(比如 20x20 数组)的数据结构。主要区别在于每个单元必须连接到它周围的八个邻居(即上、下、左、右和四个角)。
每个成员的状态会根据邻居的数据变化而变化。因此,每个细胞都动态生长。每个小区都需要不断地检查所有邻居的数据。
根据这个要求,我想象这个数据结构是圆形的,像环面或百吉饼,没有边,所以每个单元格都是相互连接的。
对这个数据结构的表示有什么想法吗?我正在考虑使用邻接链表图,其中每个成员都包含周围八个邻居的链表。你怎么看?我在正确的轨道上吗?
主要取决于你的问题,但我对邻接链表有疑问。如果你的邻居动态增长,那会更合适,但在这种情况下,它们似乎是固定的。所以你也可以只使用一个指向你邻居的数组。
问题表述好像不是很清楚:
The status of each member will change based on the data changes of the neighbors. So, every cell grow dynamically. Each cell needs to check the data of all its neighbours constantly.
这到底是什么意思?让我们假设只有一个值发生变化。然后所有的邻居都应该改变,他们的所有邻居再次改变,直到所有的值都改变了。但是原始值呢,在它的邻居改变之后,它是否应该再次改变以响应(并无限期地改变 - 听起来像个坏主意)?
这个怎么样:我们有一个简单的 1x4 二维数组 A B C D
,其中 A 是 B 和 D 的邻居,B 是 A 和 C 的邻居,等等
说A变了。 B 和 D 也应该如此。现在,C 应该改变——它是否应该根据 B 和 D 的变化立即改变?还是B第一,D第二?或者什么?
你的问题中constantly
和dynamically
的meaning/definition是什么?是否有时间步长,例如
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.
在大多数情况下,我会(和大多数其他人一样)建议使用基于二维数组的结构,但使用 setter 方法,该方法在调用时会自动更改传播。但这实际上取决于您对 constantly
和 dynamically
的定义
寻找生命游戏的实现,它使用 0 和 1 来实现。除非您通过将解决方案收敛到每次迭代的一组约束来做一些非常复杂的事情,否则您将每次循环遍历您的数组,引用最后一个完整的生成,并更新所有内容以在每个循环结束时创建新的生成.
我正在研究一个问题并用 C++ 实现一个算法。该算法需要一个类似于二维数组(比如 20x20 数组)的数据结构。主要区别在于每个单元必须连接到它周围的八个邻居(即上、下、左、右和四个角)。
每个成员的状态会根据邻居的数据变化而变化。因此,每个细胞都动态生长。每个小区都需要不断地检查所有邻居的数据。
根据这个要求,我想象这个数据结构是圆形的,像环面或百吉饼,没有边,所以每个单元格都是相互连接的。
对这个数据结构的表示有什么想法吗?我正在考虑使用邻接链表图,其中每个成员都包含周围八个邻居的链表。你怎么看?我在正确的轨道上吗?
主要取决于你的问题,但我对邻接链表有疑问。如果你的邻居动态增长,那会更合适,但在这种情况下,它们似乎是固定的。所以你也可以只使用一个指向你邻居的数组。
问题表述好像不是很清楚:
The status of each member will change based on the data changes of the neighbors. So, every cell grow dynamically. Each cell needs to check the data of all its neighbours constantly.
这到底是什么意思?让我们假设只有一个值发生变化。然后所有的邻居都应该改变,他们的所有邻居再次改变,直到所有的值都改变了。但是原始值呢,在它的邻居改变之后,它是否应该再次改变以响应(并无限期地改变 - 听起来像个坏主意)?
这个怎么样:我们有一个简单的 1x4 二维数组 A B C D
,其中 A 是 B 和 D 的邻居,B 是 A 和 C 的邻居,等等
说A变了。 B 和 D 也应该如此。现在,C 应该改变——它是否应该根据 B 和 D 的变化立即改变?还是B第一,D第二?或者什么?
你的问题中constantly
和dynamically
的meaning/definition是什么?是否有时间步长,例如
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.
在大多数情况下,我会(和大多数其他人一样)建议使用基于二维数组的结构,但使用 setter 方法,该方法在调用时会自动更改传播。但这实际上取决于您对 constantly
和 dynamically
寻找生命游戏的实现,它使用 0 和 1 来实现。除非您通过将解决方案收敛到每次迭代的一组约束来做一些非常复杂的事情,否则您将每次循环遍历您的数组,引用最后一个完整的生成,并更新所有内容以在每个循环结束时创建新的生成.