Я реализую объединение несвязанных множеств по рангу и сжатию пути в c ++ в соответствии с алгоритмом cp . Но здесь я получаю сообщение об ошибке ссылка на 'rank' неоднозначна . Я прочитал много статей об этой ошибке, но не смог получить удовлетворительного ответа. Может ли кто-нибудь помочь мне с этой проблемой? Заранее спасибо.
#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;
}
}