a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 116|回复: 1

[C语言] 二级考试C基础:并查集UFSet类

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  /*
$ F9 T; G- o3 [: B! {5 b  Name: 并查集UFSet类
  Y6 a0 G% m7 H$ A  Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处
) u2 c: i3 v% \# f+ I. v6 g  Author: goal000011113 _. k& H8 [4 h! F
  Date: 23-12-08 15:215 x; M$ \' C: t/ j
  Description: 实现了普通的查找和合并的算法,也实现了压缩路径和按大小求并高效算法,并对两者进行了测试比较。
/ W) B8 }5 O5 i! D- A' N$ o  有关算法的分析讨论详见拙作《一种简单而有趣的数据结构--并查集》:
' Z3 n3 U- V+ R: a* i  */
8 z- o+ b/ i5 g9 o4 T  #include
0 C" y' B5 c2 b/ h3 ]: A. T; J  #include" d7 h4 P# n# z' a0 T7 c
  using namespace std;5 J2 p& W* A  f+ R% B
  const int MAX = 50000; //集合的最大成员数量# n6 U4 M/ m, q. g; M7 \. m+ ?2 T
  class UFSet{ //并查集类
( D$ P) u- Z3 a. U+ [- ?1 Q  public:
+ R; D& J- Q) A7 K  UFSet(int s = MAX); //构造函数
; R/ _0 R. G; ^- V/ y: j% [  UFSet(const UFSet & obj); //拷贝构造函数
, L. c5 [( C" c) ~# b: D4 o+ V1 R" K  ~UFSet() //析构函数# O( n, b! o9 I' @
  {0 |; |2 [) b/ A- C, U
  delete []father;
+ H/ v' E/ L& g" \% Q+ Z/ l  }
9 b# k; B: p; J, y; ^: w  UFSet & operator = (const UFSet & obj); //赋值函数
9 I. P; F% ]1 t7 s( X  t) b* h  int FindFather(int pos); //寻找序号pos的族长大人
/ A4 |, J: R& c/ |5 o- K, f% d1 ~  bool Unite(int posI, int posJ);//将成员posI和posJ合并到同一个家族, j- i4 r; e$ c" M2 D( D% ?
  int FindFatherAndReducePath(int pos); //查找族长并压缩路径
$ u- E2 T" l+ m& U6 F( C  bool UnionBySize (int posI, int posJ); //按大小求并, G& ~* d8 f# j9 E
  bool SameFamily(int posI, int posJ); //判断成员posI和posJ是否属于同一家族: m8 Z0 h2 y1 I0 J, J( @1 T
  void PrintUFSet();
9 @7 {0 J, T+ W$ n  private:
3 z! j" s& k" }# _6 ]% a" e* c: k  int *father; //并查集成员数组,存放各元素的父亲结点; Z, K( }- y7 v! H5 |4 b# y% E& a
  int size; //并查集成员数量
# V( w# i& A1 r4 v! @' F  v, K  };
- V( q; a6 s8 ~  UFSet::UFSet(int s) : size(s) //构造函数
; H1 c3 B, a9 a8 H3 ]  {7 i: p& e8 K! A  {. H
  father = new int[size + 1];! x7 ?' z2 R% e
  for (int i=0; i
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:09 | 显示全部楼层

二级考试C基础:并查集UFSet类

  break;
0 O3 I9 J7 j- }  }- |. E9 R" k, N' b# O( z# [
  time(&endTime);0 K, V# s  ?% G8 K' L3 n
  cout
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 09:01 , Processed in 0.242419 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表