gpt4 book ai didi

c++ - 初始化数组 C++

转载 作者:行者123 更新时间:2023-11-28 02:34:20 24 4
gpt4 key购买 nike

我的代码试图实现 union 查找算法,并且我有 id[] 数组和 sz[] 数组。我在 Union-Find 构造函数中初始化它们,但是一旦我尝试在 Union-Find 类中的方法中使用这些数组,它会将所有数组值更改为 1。我不明白为什么。有什么明显的我想念的东西吗??

H文件

class UnionFind{
public:
UnionFind(int size);
void join(int x, int y);
int connected(int x, int y);
int find(int x);

private:

int size;
int id[];
int sz[];

};

CPP文件

UnionFind::UnionFind(int size){
this->id[size] = id[size];
for(int i = 0; i < size; i++){
id[i] = i;
}
for(int i = 0; i < size; i++){
sz[i] = 1;
}
}

int UnionFind::find(int l){
//Path Compression Finding the Root
for(int i = 0; i < 5; i++){
}
while(l != id[l]){
id[l] = id[id[l]];
l = id[l];
}
return l;

}

void UnionFind::join(int x, int y){
int m = find(x);
int n = find(y);

if(sz[m] < sz[n]){
id[m] = n;
sz[n] += sz[m];
}
else{
id[n] = m;
sz[m] += sz[n];
}
}

int UnionFind::connected(int x, int y){
if(find(x) == find(y)){
return 1;
}
else{
return 0;
}
}

最佳答案

来自评论。

  • 你不能将 int id[] 作为类(class)成员,
  • 使用 std::vector(调整大小并填充构造函数),
  • 你忘记在构造函数中设置成员 size
  • 您的查找算法使用路径减半而不是路径压缩(这不会影响运行时间)。

旁注:您可以使用单个数组/vector 来实现不相交的集合数据结构。

关于c++ - 初始化数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28034053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com