【发布时间】:2012-08-24 12:04:01
【问题描述】:
我正在使用队列来实现广度优先搜索。树的节点是 state 类型的,而队列中的节点是 node 类型的。
struct node
{
int b1,b2,b3,b4;
node* link;
}
struct state
{
int b1,b2,b3,b4;
state* rightChild;
state* leftChild;
};
Queue.enqueue() 函数的原型是:
bool enqueue(node n);
要将树的节点(状态类型)传递给它,我必须通过复制构造函数或重载赋值运算符转换它们,或者 - 我可以使 Queue 成为 Queue 的基类strong>state 以便通过多态在队列中接受状态对象。 现在有什么好的方法呢?
【问题讨论】:
-
Err,你不需要保留
state *s 的队列才能让它工作吗? -
@veredesmarald 但
state在队列中没有必要的状态 *link 成员 -
如果您打算将此队列用于 BFS,您需要能够找到您出列的每个节点的邻居(在原始树中)并将它们添加到队列的末尾。如果您的队列只是存储来自树节点 (
b1 ... b4) 的数据,而不是指向实际树节点的指针,您将如何完成此操作? -
@veredesmarald 这发生在我身上——所以实现它的一种方法是让 state 成为队列的基类,不是吗?但是我怎么能将
state节点传递给队列(因为多态性相反)? -
你在写 C++ 吗?如果是这样,通常的容器(如队列)方法是使用模板,因此队列节点可以存储您想要的任何内容。
标签: algorithm queue copy-constructor breadth-first-search