首页 > 其他 > 详细

并查集—解密犯罪团伙

时间:2015-02-05 09:37:36      阅读:415      评论:0      收藏:0      [点我收藏+]

警察想查清楚有几个犯罪团伙,搜集到了一些线索:

现在有10个强盗;

1号强盗与2号强盗是同伙;

3号强盗与4号强盗是同伙;

5号强盗与2号强盗是同伙;

4号强盗与6号强盗是同伙;

2号强盗与6号强盗是同伙;

8号强盗与7号强盗是同伙;

9号强盗与7号强盗是同伙;

1号强盗与6号强盗是同伙;

2号强盗与4号强盗是同伙;


强盗同伙的同伙也是同伙,请问一共有多少个独立的犯罪团伙?


基本思路:

1.一维数组f,表示10个强盗,值存储每个强盗的boss是谁。

2.初始化,开始boss都是自己,f[i]=i。

技术分享

3.合并同伙,“靠左”法则,“1号强盗与2号强盗是同伙”,2号的boss变成了1号,f[2]=1。

技术分享

。。。。。。

第三条线索:“5号强盗与2号强盗是同伙”,2号的boss目前是1号,“擒贼先擒王”,那么让1号的boss直接变为5号,即f[1]=5,f[2]=5。

。。。。。。


最终结果:

技术分享


如果f[i]=i,就表示此人是一个犯罪团伙的最高领导人,有多少个独立的团伙,等于看最终结果中有多少个f[i]=i。


并查集:

通过一个一维数组来实现,其本质是维护一个森林。刚开始的时候,森林的每个点都是孤立的,也可以理解为每个点就是一棵只有一个节点的树,之后通过一些条件,将这些树合并成一棵大树。

合并过程中,“靠左”法则和“擒贼先擒王”原则。


技术分享

技术分享

技术分享


输入数据:

第一行n,m,分别表示强盗人数,和线索条数,接下来m行有两个数a,b,表示a和 b是同伙。

技术分享

运行结果:

技术分享


并查集也称为不相交集数据结构。


并查集—解密犯罪团伙

原文:http://blog.csdn.net/wtyvhreal/article/details/43494647

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!