青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

/*
  Name: 并查集UFSet類
  Copyright: 始發(fā)于goal00001111的專欄;允許自由轉(zhuǎn)載,但必須注明作者和出處
  Author: goal00001111
  Date: 23-12-08 15:21
  Description: 實現(xiàn)了普通的查找和合并的算法,也實現(xiàn)了壓縮路徑和按大小求并高效算法,并對兩者進(jìn)行了測試比較。
有關(guān)算法的分析討論詳見拙作《一種簡單而有趣的數(shù)據(jù)結(jié)構(gòu)--并查集》:
http://blog.csdn.net/goal00001111/archive/2008/12/24/3595844.aspx
*/
#include <iostream>
#include <time.h>

using namespace std;

const int MAX = 50000; //集合的最大成員數(shù)量

class UFSet{ //并查集類
public:
    UFSet(int s = MAX); //構(gòu)造函數(shù)
   
    UFSet(const UFSet & obj); //拷貝構(gòu)造函數(shù)
   
    ~UFSet() //析構(gòu)函數(shù)
    {
        delete []father;
    }
   
    UFSet & operator = (const UFSet & obj); //賦值函數(shù)
    
    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; //并查集成員數(shù)組,存放各元素的父親結(jié)點(diǎn)
    int size;   //并查集成員數(shù)量
};

UFSet::UFSet(int s) : size(s) //構(gòu)造函數(shù)
{
    father = new int[size + 1];
    for (int i=0; i<=size; i++) //所有的數(shù)組元素值均初始化為-1
        father[i] = -1;
}

UFSet::UFSet(const UFSet & obj) //拷貝構(gòu)造函數(shù)
{
    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) //賦值函數(shù)
{
    if (this == &obj) //檢查自賦值
        return *this;
   
    delete []father; //釋放原有的內(nèi)存資源
   
    size = obj.size;  //分配新的內(nèi)存資源,并復(fù)制內(nèi)容
    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當(dāng)族長:誰讓posI站在posJ的前面呢!
       
    return true;
}

int UFSet::FindFatherAndReducePath(int pos)//查找族長并壓縮路徑
{
    if (father[pos] < 0)
        return pos;
    //若自己不是族長,則找到族長后,將所途經(jīng)的結(jié)點(diǎn)均指向族長   
    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強(qiáng),即|fI|>|fJ|,則fI當(dāng)族長,并修改father[fI]和father[fJ]
        father[fI] += father[fJ];
        father[fJ] = fI;
    }
    else              //否則fJ當(dāng)族長
    {
        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;
}
Posted on 2008-12-24 13:41 夢想飛揚(yáng) 閱讀(1282) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品久久天天躁| 99精品欧美| av成人免费在线观看| 亚洲另类自拍| 国产精品99久久久久久久久久久久| 日韩视频在线一区二区| av不卡在线观看| 午夜精品亚洲| 美女网站久久| 亚洲精品日韩一| 亚洲一区二区免费看| 欧美在线免费一级片| 男人插女人欧美| 国产精品激情电影| 在线看片日韩| 亚洲视频在线播放| 欧美在线观看一区二区| 欧美成人亚洲| 亚洲最新视频在线播放| 午夜欧美精品久久久久久久| 久久精品一区中文字幕| 欧美国内亚洲| 国产视频精品xxxx| 99精品国产一区二区青青牛奶| 性欧美超级视频| 欧美岛国激情| 亚洲尤物精选| 欧美人交a欧美精品| 韩国一区二区三区在线观看| 一区二区激情小说| 麻豆av一区二区三区| 在线亚洲成人| 久久尤物视频| 亚洲精品日韩在线观看| 久久福利精品| 国产精品一区二区三区免费观看| 亚洲日本欧美日韩高观看| 欧美自拍丝袜亚洲| 一区二区激情| 欧美区在线播放| 亚洲毛片av| 欧美国产精品日韩| 久久三级视频| 一区在线视频观看| 久久精品成人欧美大片古装| 一本大道av伊人久久综合| 欧美黑人在线播放| 亚洲精品资源| 欧美成人蜜桃| 久久米奇亚洲| 一区二区三区我不卡| 久久爱www久久做| 亚洲一区二区三区在线观看视频| 欧美日本免费| 亚洲视频免费观看| 日韩视频在线观看免费| 欧美成人嫩草网站| 亚洲精品一级| 最新国产拍偷乱拍精品| 免费欧美日韩国产三级电影| 一区二区亚洲精品国产| 久久婷婷国产麻豆91天堂| 欧美一进一出视频| 国产专区精品视频| 久久综合999| 久久嫩草精品久久久久| 亚洲福利在线观看| 亚洲国产影院| 欧美午夜精品久久久久免费视| 夜夜嗨av一区二区三区| 日韩视频在线一区| 欧美日韩综合精品| 香蕉成人伊视频在线观看| 亚洲一区二区在| 国产日韩欧美综合在线| 久久久噜噜噜久久| 久久免费精品视频| 亚洲精品国产视频| 亚洲最新在线| 国产亚洲欧美一区二区| 欧美成ee人免费视频| 欧美高潮视频| 亚洲欧美精品| 久久视频免费观看| 亚洲视频欧美在线| 欧美专区在线| 亚洲少妇自拍| 久久精品国产久精国产思思| 91久久久久| 亚洲自拍都市欧美小说| 亚洲国产一区二区三区高清| 亚洲精选91| 激情成人综合网| 亚洲免费精品| 久久深夜福利免费观看| 99国产欧美久久久精品| 性欧美1819性猛交| 日韩一级黄色av| 欧美在线一级va免费观看| 亚洲乱码视频| 欧美在线视频一区| 日韩视频不卡中文| 性xx色xx综合久久久xx| 亚洲美女网站| 欧美专区在线观看一区| 亚洲一区二区三区视频播放| 久久久久久一区二区| 亚洲欧美成人一区二区在线电影 | 玖玖视频精品| 午夜精品理论片| 欧美激情二区三区| 久久久久久久一区| 国产精品电影在线观看| 亚洲国产专区| 亚洲乱码视频| 欧美第十八页| 欧美激情第10页| 影音先锋亚洲电影| 久久国产免费看| 欧美一区二区三区在线视频 | 欧美午夜欧美| 最新日韩在线视频| 亚洲第一页自拍| 欧美一区国产在线| 午夜久久久久久久久久一区二区| 嫩草成人www欧美| 麻豆精品传媒视频| 国产曰批免费观看久久久| 午夜一级在线看亚洲| 亚洲资源av| 欧美婷婷久久| 日韩视频永久免费观看| 日韩视频在线免费| 欧美精品日韩三级| 亚洲欧洲精品一区二区精品久久久 | 一区二区动漫| 欧美女同视频| 亚洲人成网站色ww在线| 亚洲精品午夜| 欧美日韩成人综合| 日韩天堂在线观看| 亚洲一区二区三区免费视频| 欧美日韩福利在线观看| 亚洲毛片在线观看.| 亚洲视频国产视频| 国产伦精品一区二区三区视频孕妇 | 久久爱www久久做| 欧美在线观看www| 国产中文一区| 美女精品自拍一二三四| 欧美黄网免费在线观看| av成人黄色| 国产午夜精品麻豆| 快播亚洲色图| 一本久道久久综合中文字幕| 午夜久久福利| 亚洲国产精品va| 欧美日韩专区| 久久精品国产精品| 日韩视频一区二区三区| 欧美一级免费视频| 一区二区视频欧美| 欧美日韩国产在线一区| 午夜精品美女久久久久av福利| 久久精品麻豆| 日韩视频在线免费观看| 国产精品日韩欧美一区| 99综合视频| 国产精品另类一区| 久久狠狠久久综合桃花| 亚洲欧洲在线一区| 久久精品国产欧美激情| 亚洲激情二区| 国产精品日韩一区二区三区| 久久精品日韩| 亚洲在线观看视频| 亚洲国产精品美女| 欧美专区一区二区三区| 亚洲理论在线| 狠狠色综合网| 国产精品三级视频| 欧美顶级大胆免费视频| 午夜免费日韩视频| 日韩一区二区福利| 免费试看一区| 欧美在线视频一区| 亚洲深夜福利| 亚洲另类视频| 亚洲第一页在线| 国产一区二区三区四区五区美女| 欧美精品日韩综合在线| 久久蜜桃av一区精品变态类天堂| 亚洲欧美成人| 亚洲视频电影在线| 日韩西西人体444www| 亚洲国产精品热久久| 噜噜噜噜噜久久久久久91| 香蕉乱码成人久久天堂爱免费 | 国产欧美一区二区三区沐欲| 欧美日韩国产在线播放|