又黄又www的网站_青青草.com_在线亚洲美日韩_九九九国产视频_√天堂8资源中文在线_一区二区三区免费网站_久久久久国产一区二区三区_人妻激情偷乱视频一区二区三区_一本到在线视频

計算機二級考試C基礎:并查集UFSet類

發布時間:2011-09-16 共1頁

  /*
  Name: 并查集UFSet類
  Copyright: 始發于goal00001111的專欄;允許自由轉載,但必須注明作者和出處
  Author: goal00001111
  Date: 23-12-08 15:21
  Description: 實現了普通的查找和合并的算法,也實現了壓縮路徑和按大小求并高效算法,并對兩者進行了測試比較。
  有關算法的分析討論詳見拙作《一種簡單而有趣的數據結構--并查集》:
  */
  #include <iostream>
  #include <time.h>
  using namespace std;
  const int MAX = 50000; //集合的最大成員數量
  class UFSet{ //并查集類
  public:
  UFSet(int s = MAX); //構造函數
  UFSet(const UFSet & obj); //拷貝構造函數
  ~UFSet() //析構函數
  {
  delete []father;
  }
  UFSet & operator = (const UFSet & obj); //賦值函數
  int FindFather(int pos); //尋找序號pos的族長大人
  bool Unite(int posI, int posJ);//將成員posI和posJ合并到同一個家族
  int FindFatherAndReducePath(int pos); //查找族長并壓縮路徑
  bool UnionBySize (int posI, int posJ); //按大小求并
  bool SameFamily(int posI, int posJ); //判斷成員posI和posJ是否屬于同一家族
  void PrintUFSet();
  private:
  int *father; //并查集成員數組,存放各元素的父親結點
  int size; //并查集成員數量
  };
  UFSet::UFSet(int s) : size(s) //構造函數
  {
  father = new int[size + 1];
  for (int i=0; i<=size; i++) //所有的數組元素值均初始化為-1
  father[i] = -1;
  }
  UFSet::UFSet(const UFSet & obj) //拷貝構造函數
  {
  size = obj.size;
  father = new int[size + 1];
  for (int i=0; i<=size; i++)
  father[i] = obj.father[i];
  }
  
  UFSet & UFSet::operator = (const UFSet & obj) //賦值函數
  {
  if (this == &obj) //檢查自賦值
  return *this;
  delete []father; //釋放原有的內存資源
  size = obj.size; //分配新的內存資源,并復制內容
  father = new int[size + 1];
  for (int i=0; i<=size; i++)
  father[i] = obj.father[i];
  return *this; //返回本對象的引用
  }
  int UFSet::FindFather(int pos)//尋找序號pos的族長大人。若pos本身是族長,則返回自身
  {
  if (father[pos] < 0)
  return pos;
  return FindFather(father[pos]);
  }
  bool UFSet::Unite(int posI, int posJ)//將成員posI和posJ合并到同一個家族
  {
  //首先各自去尋找自己的族長
  int fI = FindFather(posI);
  int fJ = FindFather(posJ);
  if (fI == fJ) //如果是同一個族長門下,不必合并,即合并失敗
  return false;
  else
  father[fJ] = fI; //否則fI當族長:誰讓posI站在posJ的前面呢!
  return true;
  }
  int UFSet::FindFatherAndReducePath(int pos)//查找族長并壓縮路徑
  {
  if (father[pos] < 0)
  return pos;
  //若自己不是族長,則找到族長后,將所途經的結點均指向族長
  return father[pos] = FindFatherAndReducePath(father[pos]);
  }
  bool UFSet::UnionBySize(int posI, int posJ)//按大小求并
  {
  //首先各自去尋找自己的族長
  int fI = FindFatherAndReducePath(posI);
  int fJ = FindFatherAndReducePath(posJ);
  if (fI == fJ) //如果是同一個族長門下,不必合并,即合并失敗
  return false;
  else if (father[fI] < father[fJ])
  {//如果族長fI的實力比fJ強,即|fI|>|fJ|,則fI當族長,并修改father[fI]和father[fJ]
  father[fI] += father[fJ];
  father[fJ] = fI;
  }
  else //否則fJ當族長
  {
  father[fJ] += father[fI];
  father[fI] = fJ;
  }
  return true;
  }
  bool UFSet::SameFamily(int posI, int posJ)//判斷成員posI和posJ是否屬于同一家族
  {
  return FindFatherAndReducePath(posI) == FindFatherAndReducePath(posJ);
  }
  void UFSet::PrintUFSet()//輸出集合的所有元素
  {
  for (int i=0; i<=size; i++)
  cout << father[i] << ’ ’;
  cout << endl;
  }
  int main()
  {
  time_t startTime, endTime;
  UFSet obj;
  int p, q;
  time(&startTime);
  for (int i=0; i<MAX; i++)
  {
  p = rand() % MAX + 1;
  q = rand() % MAX + 1;
  if (p == q)
  continue;
  //cout << p << "-" << q << " ";
  // if (i % 10 == 0)
  // cout << endl;
  obj.Unite(p, q);
  }
  while (1)
  {
  p = rand() % MAX + 1;
  q = rand() % MAX + 1;
  if (p == q)
  continue;
  if (obj.SameFamily(p, q))
  cout << endl << p << "≡" << q << endl;
  else
  cout << endl << p << "!≡" << q << endl;
  break;
  }
  time(&endTime);
  cout << difftime(endTime, startTime) << endl;
  time(&startTime);
  for (int i=0; i<MAX; i++)
  {
  p = rand() % MAX + 1;
  q = rand() % MAX + 1;
  if (p == q)
  continue;
  //cout << p << "-" << q << " ";
  // if (i % 10 == 0)
  // cout << endl;
  obj.UnionBySize(p, q);
  }
  while (1)
  {
  p = rand() % MAX + 1;
  q = rand() % MAX + 1;
  if (p == q)
  continue;
  if (obj.SameFamily(p, q))
  cout << endl << p << "≡" << q << endl;
  else
  cout << endl << p << "!≡" << q << endl;
  break;
  }
  time(&endTime);
  cout << difftime(endTime, startTime) << endl;
  system("pause");
  return 0;
  }

百分百考試網 考試寶典

立即免費試用
久久久国产精品黄毛片| 亚欧日韩另类中文欧美| 中文字幕中文字幕精品| 国产日本精品| 国产亚洲美州欧州综合国| 欧美日韩在线视频一区| 精品偷拍各种wc美女嘘嘘| 国产欧美日韩精品在线观看| 国产高清www| 九九热免费在线| 日本高清视频免费观看| 嫩草影院发布页| 亚洲天堂一区二区| 国产精品啊v在线| 中文字幕乱码一区二区免费| 亚洲丁香久久久| 91综合免费在线| 青青草av网站| 亚洲精品国产精品乱码| 免费大片黄在线观看| 男人av在线播放| 亚洲国内精品| 玖玖在线精品| 国产又粗又猛又色| 国产欧美精品| 国产jjizz一区二区三区视频| 女人丝袜激情亚洲| 91黄色在线看| 亚洲三级网址| 可以在线看的av网站| 岛国精品一区| 三上悠亚av一区二区三区| 亚洲国产欧美精品| 国产精品久久久久77777| 欧美韩国日本在线| 国产精品xxxxxx| 国产一级黄色电影| 成人影院中文字幕| 亚洲日本在线播放| 极品白浆推特女神在线观看| 日韩欧美一区二区三区免费看| 久久亚洲一区二区三区明星换脸| 亚洲人成网在线播放| 亚洲国产精品视频一区| 青青草成人免费| 天天天天天天天操| 一区二区三区在线免费看 | 性久久久久久久久久久| 午夜性色福利影院| 性直播体位视频在线观看| 在线成人欧美| 欧美唯美清纯偷拍| 91青青草免费在线看| 丰满大乳奶做爰ⅹxx视频| 欧美特级xxxxbbbb毛片| www.日韩| 成人免费毛片a| 久久久精品国产| 丝袜制服一区二区三区| 色婷婷av一区二区三| 少妇淫片在线影院| 成人黄色国产精品网站大全在线免费观看 | 久久久久久久久久久久久久久久av | 欧美性色xo影院| 91夜夜揉人人捏人人添红杏| 在线免费播放av| 尤物视频在线| 欧美毛片免费观看| 午夜电影一区二区三区| 亚洲一区二区免费| 日韩在线中文字幕视频| 88av在线| 亚洲久久成人| 亚洲国产欧美一区二区三区久久| 色综合666| 中文字幕av无码一区二区三区| 激情影院在线观看| 国内精品久久久久影院一蜜桃| 在线成人免费网站| 无码内射中文字幕岛国片| 亚洲久草视频| 成人av在线播放| 亚洲国产综合91精品麻豆| 91精品视频大全| 看片网站在线观看| 久久久资源网| 激情综合五月婷婷| 午夜精品久久久久久久99热浪潮| 国产一线在线观看| 久久久久久久久久久久久久久久久久久| 91九色精品| 亚洲аv电影天堂网| 日韩欧美在线免费观看视频| 成人亚洲欧美激情在线电影 | 中文天堂资源在线| 网址你懂得在线观看| 日日骚欧美日韩| 久久91亚洲精品中文字幕奶水| 永久免费未满蜜桃| 黄色大秀av大片| 日韩黄色小视频| 色综合久综合久久综合久鬼88 | 中文字幕一二三| 99热免费在线| 亚洲看片一区| 久久亚洲精品一区| 人人妻人人澡人人爽| 高清毛片在线看| 不卡av在线免费观看| 91欧美精品午夜性色福利在线| 日韩手机在线观看| 麻豆免费在线| 一区二区三区四区蜜桃| 亚洲一卡二卡三卡| 四虎影院成人在线观看| 不卡一区综合视频| 国产亚洲精品久久久久久| 欧美一区二区三区成人精品| 欧美成人综合在线| 2021中文字幕一区亚洲| 久久综合久久久| 污视频网站免费观看| 九九综合九九| 国产手机视频精品| 日韩国产高清污视频在线观看| jizzjizzjizz美国| 亚洲久久久久久| 九九热这里有精品| 日本视频一区二区| 国产精品一区二区91| 成人av免费在线| 成人精品在线视频观看| 久久久电影一区二区三区| 国产欧美视频一区二区| 国产suv精品一区二区6| 中文字幕高清一区| 久青草国产97香蕉在线视频| 最新国产精品久久| 久久久久久久久久久久久女过产乱| 亚洲网站视频在线观看| 你懂的在线播放| 日韩精品麻豆| 亚洲国产精品成人| 亚洲天堂偷拍| 99热在这里有精品免费| 国产精品久久三区| 欧美videos中文字幕| 国产欧美精品xxxx另类| 岛国视频一区免费观看| 日韩精品一线二线三线| 中文字幕在线中文字幕日亚韩一区| 97精品人人妻人人| 天堂tv亚洲tv日本tv欧美人tv| 超碰在线观看免费| 四虎国产精品成人免费影视| 欧美日韩激情| 91原创在线视频| 亚洲第一搞黄网站| 亚洲私人黄色宅男| 亚洲日韩第一页| 欧美成ee人免费视频| 成人国产精品久久久网站| 蝌蚪91视频| 免费观看久久av| 欧美影院午夜播放| 在线播放 亚洲| 后入内射欧美99二区视频| 男人天堂网在线观看| 日本欧美韩国一区三区| 欧美va天堂va视频va在线| 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲午夜久久久久中文字幕久| 亚洲视频在线观看视频| 最新精品视频| 日韩av在线天堂| 福利在线免费| 亚洲精品乱码日韩| 日韩电影免费一区| 午夜精品久久久久久久99樱桃| 久久成人免费视频| 欧美一级片中文字幕| 国产精品视频无码| 久久久成人av毛片免费观看| 日韩av二区在线播放| 精品国产乱码久久久久久蜜臀| 欧美日韩在线一二三| 日韩无码精品一区二区三区| 91蝌蚪|人| 青青草视频在线观看| 成人av国产| 亚洲激情图片qvod| 亚洲va国产va天堂va久久| 亚洲一区二区三区综合| 最近最新mv在线观看免费高清| 日韩激情视频在线观看| 91大神在线播放精品| 色老头在线视频| 日本在线成人| 一本大道av伊人久久综合| 超碰97在线看|