我正在实现一个 BFS,它要做的是通过一个有序的树来找到一个谜题的最短解决方案。
我将要做的是创建一个 Snapshot 对象,该对象保存拼图中每个部分的当前位置。我会将这个 Snapshot 对象添加到队列中并检查它是否是解决方案。但是,我正在动态创建这些快照。那么是否有某种方式可以在将 Snapshot 对象放入队列时自动生成它们的名称?
还是我必须跟踪我做了多少声明,然后硬编码说...
快照快照2;快照快照3;快照快照4;ETC..
我正在实现一个 BFS,它要做的是通过一个有序的树来找到一个谜题的最短解决方案。
我将要做的是创建一个 Snapshot 对象,该对象保存拼图中每个部分的当前位置。我会将这个 Snapshot 对象添加到队列中并检查它是否是解决方案。但是,我正在动态创建这些快照。那么是否有某种方式可以在将 Snapshot 对象放入队列时自动生成它们的名称?
还是我必须跟踪我做了多少声明,然后硬编码说...
快照快照2;快照快照3;快照快照4;ETC..
我认为您是在问,当您不知道会有多少对象时,如何创建和保留大量对象。
您需要创建一个对象数组。然后您可以以快照[1]、快照[2]...快照[i] 的形式访问它们。
有一种方法 - 您使用预处理器的 Token-Pasting Operator。这允许您基于变量创建名称,因此您可以指定:
#define S(variable) snapshot#variable
并且您可以创建名为 snapshot1、snapshot2 等的变量:
Snapshot S(1)
Snapshot S(2)
但是,我不确定这是您真正想要的,我可能曾经在实践中使用过这种技术,那是用于代码生成器。
您可以使用标准模板库中的队列,然后创建一个函数来创建快照对象并将其放入队列中。给这个函数一个静态变量,每次调用它都会递增,并写入快照的 id 字段。
我认为我们需要更多信息。如果您只是将它们从队列中弹出,您为什么要关心它们的名称?队列中的对象通常不编号,除非您在数组中实现它。
对不起,整个队列的事情有点引起不必要的混乱。
让我们再举一个例子。所以对于这个拼图,拼图中的块数由用户指定。我设计程序的方式是拼图的每一块都是它自己的对象。
所以当我开始创建这些片段时,我可以使用某种变量命名方案来命名这些片段吗?所以像这样的事情只是一个例子......
for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();
您不能在 C++ 中动态创建变量名,至少在没有一些(想象的?)附加组件的情况下不能。
编辑:顺便说一句,我在 AI 课上做了一个我认为与你相似的作业,其中我们涵盖了 BFS、DFS 和 A* 等基础知识。没有必要为“快照”拥有唯一命名的对象,我使用了队列。
编辑2:如果您需要跟踪您拥有的快照数量,请创建一个计数变量,每次创建对象时都会递增。