我正在使用不相交集和并集/查找操作制作一个 C++ 迷宫程序。
我有一个 MakeSet(int x)
函数,它为迷宫中的每个整数元素 x 创建一个新节点。 (即 4x4 迷宫的 1 到 16
)。因此,最初每个元素都在自己的集合中。
我的MakeSet看起来像这样
void Maze::MakeSet(int x)
{
Node *root = new Node;
root->label = x;
root->parent = NULL;
}
但是在 CreateMaze() 函数中,我必须多次调用 MakeSet 才能将所有元素最初放入自己的集合中。因此,根目录将不断被覆盖。如何动态分配许多不同的节点?我应该将它们分开放在一个数组中吗?
最佳答案
您已经分配了一个新的节点
,只是没有保留它。您需要更改函数以返回 Node*
,并将结果存储在数组或 vector 中。
Node* Maze::MakeSet(int x) {
Node *root = new Node;
root->label = x;
root->parent = NULL;
return root;
}
Node *nodes[16];
for (int i = 0 ; i != 16 ; i++) {
nodes[i] = Maze::MakeSet(i);
}
更好的方法是在构造函数中进行Node
初始化:
Node::Node(int x) : label(x), parent(NULL) {
}
您现在可以在循环中创建所有集合,并将指向它们的指针存储在数组中:
Node *nodes[16];
for (int i = 0 ; i != 16 ; i++) {
nodes[i] = new Node(i);
}
关于C++ 分配节点指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475101/