为了账号安全,请及时绑定邮箱和手机立即绑定

C/C++算法(并查集优化后)

标签:
C C++ 数据结构

/
并查集优化1
作者:Zhihang
(附:这是俺滴原创,盗用请看本程序最底下)
/

include<iostream>

using namespace std;

const int n=5; //数据数量
int father[n]; //父亲节点
int zi[n]; //一个数据的层数 QQ:1184191599

int parents(int v){ //找祖宗节点
while(v!=father[v]){
father[v]=father[father[v]];
v=father[v];
}
return v;
}

void _union(int v,int w){ //合并
int parents_v=parents(v); //找到祖宗
int parents_w=parents(w);

if(zi[parents_v]>zi[parents_w]){             //看哪个祖宗的子孙多(层数) 
    father[parents_w]=father[parents_w];
}   
else if(zi[parents_w]>zi[parents_v]){
    father[parents_v]=parents_w;    
}
else if(zi[parents_v]==zi[parents_w]){
    father[parents_v]=parents_w;
    zi[parents_v]++;    
}

}

bool find(int v,int w){ //查找两个点是否连着了
if(parents(v)==parents(w)){ //找到两个点的祖宗节点,
return true; //如果一样返回 真
}
else{ //否则返回 假
return false;
}
}

int main(){
//初始化
for(int i=0;i<n;i++){
father[i]=i;
zi[i]=0;
}

//测试
_union(1,5);
_union(2,5);
_union(1,3);
_union(3,4);

cout<<find(2,4);
return 0;

}

//先Ctrl+A 再Ctrl+C 最后Ctrl+V

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消