我正在根据cp 算法在 C++ 中通过秩和路径压缩来实现不相交集联合。但是在这里我得到一个错误 ,对“秩”的引用是模棱两可的。我已经阅读了很多关于这个错误的文章,但没有得到任何满意的答案。有人可以帮我解决这个问题吗?在此先感谢。
#include<bits/stdc++.h>
using namespace std;
#define mx 10005
int parent[mx],rank[mx];
void make_set(int v) {
parent[v] = v;
rank[v] = 0;
}
int find_set(int v) {
if (v == parent[v])
return v;
return parent[v] = find_set(parent[v]);
}
void union_sets(int a, int b) {
a = find_set(a);
b = find_set(b);
if (a != b) {
if (rank[a] < rank[b])
swap(a, b);
parent[b] = a;
if (rank[a] == rank[b])
rank[a]++;
}
}
bool check(int a, int b){ return find_set(a) == find_set(b); }
int main()
{
int x;cin>>x;
for(int i=1;i<=x;++i)
{
make_set(i);
}
union_sets(1,2);
union_sets(2,3);
union_sets(4,5);
union_sets(6,7);
union_sets(5,6);
union_sets(3,7);
for(int i=1;i<=x;++i)
{
cout<<find_set(i)<<endl;
}
}