2

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

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

还是我必须跟踪我做了多少声明,然后硬编码说...

快照快照2;快照快照3;快照快照4;ETC..

4

6 回答 6

4

我认为您是在问,当您不知道会有多少对象时,如何创建和保留大量对象。

您需要创建一个对象数组。然后您可以以快照[1]、快照[2]...快照[i] 的形式访问它们。

于 2008-10-19T04:23:40.033 回答
1

有一种方法 - 您使用预处理器的 Token-Pasting Operator。这允许您基于变量创建名称,因此您可以指定:

#define S(variable) snapshot#variable

并且您可以创建名为 snapshot1、snapshot2 等的变量:

Snapshot S(1)
Snapshot S(2)

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

于 2008-10-19T19:10:53.117 回答
0

您可以使用标准模板库中的队列,然后创建一个函数来创建快照对象并将其放入队列中。给这个函数一个静态变量,每次调用它都会递增,并写入快照的 id 字段。

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

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

于 2008-10-19T03:36:46.713 回答
0

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

于 2008-10-19T04:07:30.597 回答
0

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

让我们再举一个例子。所以对于这个拼图,拼图中的块数由用户指定。我设计程序的方式是拼图的每一块都是它自己的对象。

所以当我开始创建这些片段时,我可以使用某种变量命名方案来命名这些片段吗?所以像这样的事情只是一个例子......

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();
于 2008-10-19T04:15:12.890 回答
0

您不能在 C++ 中动态创建变量名,至少在没有一些(想象的?)附加组件的情况下不能。

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

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

于 2008-10-19T04:21:49.587 回答