c++ - 使用c ++的不相交集联合实现
问题描述
我正在根据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;
}
}
解决方案
using namespace std;
给你带来麻烦,因为它创造了与你的名字相同的机会。命名空间已到位以保护名称冲突。在您的情况下, std::rank 是一个名称。删除using namespace std;
,您应该解决问题。请参阅为什么是“使用命名空间标准;” 被认为是不好的做法?.
代码中的另一个不好的做法:为什么我不应该#include <bits/stdc++.h>?.
推荐阅读
- kubernetes - k8s 就绪探测 - 带有 http get 的命令
- android - 检查 Url 完全加载的 Webview
- python - 如何拆分列表列表?
- jquery - 为选中的 p:selectOneRadio 项目设置样式
- java - 获取具有最大值的对象列表
- wordpress - 保存 Contact 7 表格以便稍后填写
- ios - 编写测试用例时弱变量变为零?
- python - 带有 FireO 的 Python 中的 Google Cloud Endpoint 框架
- java - 当我已经扩展了一个实现接口的类时,我应该显式地实现一个接口吗?
- ios - cordova build ios 因未知错误的空白项目而失败