我正在实施一个BFS,它要做的是通过一个有序的树来找到拼图的最短解决方案。

我将要做的是创建一个Snapshot对象,该对象保存拼图中每个部分的当前位置。我将此Snapshot对象添加到队列中,并检查它是否是解决方案。但是,我正在动态创建这些快照。那么有什么方法可以在将Snapshot对象放入队列时自动生成它们的名称吗?

或者我必须跟踪我做了多少声明,并且只是通过说...来对其进行硬编码。

快照snapshot2; 快照snapshot3; 快照snapshot4; 等。

有帮助吗?

解决方案

有一种方法 - 你使用预处理器的令牌 - 播放运营商。这允许您基于变量创建名称,因此您需要指定:

#define S(variable) snapshot#variable

并且您将能够创建名为snapshot1,snapshot2等的变量:

Snapshot S(1)
Snapshot S(2)

但是,我不确定这是你真正想要的,我可能在实践中使用过这种技术,那就是代码生成器。

其他提示

我认为你问的是,当你不知道会有多少物品时,你是如何制造和保存大量物品的。

您需要创建一个对象数组。然后,您可以将它们作为快照[1],快照[2] ...快照[i]。

进行访问

您可以使用标准模板库中的队列,然后创建一个创建Snapshot对象并放入队列的函数。为此函数提供一个静态变量,该变量在每次调用时都会递增并写入快照的id字段。

http://www.csci.csusb.edu/dick/samples /stl.html

http://www.cppreference.com/wiki/stl/queue/start

我认为我们需要更多信息。如果您只是将这些从队列中弹出,为什么要关心它们的名称?队列中的对象通常不会编号,除非您在数组中实现它。

对不起,整个队列的事情有点引起混乱。

让我们再看一个例子。因此,对于这个难题,拼图中的棋子数由用户指定。我设计程序的方式是每个拼图都是它自己的对象。

因此,当我开始创建这些Pieces时,我是否可以使用某种变量命名方案来命名这些Pieces。所以像这样的例子......

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();

你不能在C ++中动态创建变量名,至少没有一些(虚构的?)附加组件。

编辑:顺便说一下,我做了一个我认为与AI类相似的作业,我们在其中涵盖了BFS,DFS和A *等基础知识。没有必要为“快照”提供唯一命名的对象,我使用了队列。

edit2:如果您需要跟踪您拥有的快照数量,请创建一个计数变量,每次创建对象时该变量都会递增。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top