利用不相交集畫迷宮

2021-09-08 07:46:47 字數 821 閱讀 4543

當我們畫乙個80*50的迷宮時相當於是畫了個80*50的方格仔,把格仔和格仔之間的某些牆拆掉,互相連通的格仔我們稱之為屬於同乙個集合,如果兩個集合不連通,那就稱之為不相交集.

畫迷宮的過程就是不斷地拆除格仔與格仔之間的牆,直到第乙個格仔和最後乙個格仔屬於同乙個集合演算法終止.

不相交集類.

#ifndef _disjsets_h

#define _disjsets_h

#include using namespace std;

class disjsets;

#endif

類的實現

#include "disjsets.h"

disjsets::disjsets(int numelems):s(numelems)

int size=width*height;

srand((unsigned)time(null));

disjsets labyrinth(size);

vector> grap(size);

for(;;)

} grap[size-1].first=grap[size-1].second=1; //最後那一格仔的右面和下面的牆都要拆掉

for(int i=0;i=0 && x=size)

else if((x+1)%width==0)

else

} return ret;

}

執行

利用不相交集實現等價元素的聚類

說到聚類,相信大家最先想到的應該是k means,但是我們知道k means必須指定聚類的個數,而且聚類初始點的選取也很大影響最後聚類的效果。雖然有一些方法 如k means 可以設定較為合理的初始聚類點,但仍然需要指定聚類的個數,但有時我們並不知道一堆資料中有多少個類,這樣就使得聚類變得沒法下手。...

不相交集ADT

1.不相交集是解決等價關係的一種資料結構,執行合併和查詢的速度都非常快,m次執行合併和查詢的執行時間為 m logn 在乙個集合中,對於每一對元素 a,b a,b s,對於關係r如果滿足下面三個條件,則成關係r為等價關係 1 自反性 對於所有a s,ara 2 對稱性 arb當且僅當bra 3 傳遞...

不相交集ADT

首先我們必須明白不相交集這種資料結構是用來幹什麼的。不相交即主要用來實現動態等價問題的求解。動態 等價問題 這裡不再說明等價關係的概念,這個可以參考數理邏輯之類的書。假設我們有乙個集合和乙個等價關係 針對集合中的任意兩個元素 a 和 b,我們如何確定他們有等價關係 即a b.那麼我們需要等價類的概念...