基础 并查集
并查集是一種樹型的數據結構,是若干個不相交集合,能夠實現較快的合并和元素判斷的操作。常常在使用中以森林來表示。在這里主要介紹的是普通并查集,很多情況下使用的并查集是需要擴展的,根據使用情況的不同,有很多差別,因自身知識不足,不多介紹,以后添加。
基礎并查集偽代碼:
#include <iostream> using namespace std; #define Size 1000 int a[Size];//初始化并查集 int init(){for(int i=0;i<Size;i++)a[i]=i; }//無路徑壓縮的查找根節點 int find(int x){while(a[x]!=x)x=a[x];return x; } //合并兩個元素所在的集合 int merage(int x,int y){x=find(x);y=find(y);if(x!=y)a[x]=y; } int main() {...return 0; }壓縮路徑:
int find(int x){int q,p;p=x;while(a[x]!=x)//找根節點 x=a[x];while(p!=x)//壓縮路徑,修改路徑中所有節點 {q=a[p];a[p]=x;p=q;}return x; }merage中還有一個啟發模式,就是把深度小的集合合并到深度大的集合;int merage(int b,int c){if(height(b)==height(c)){height(b)=height(c)+1;a[c]=b;}else if(height(b)<height(c)) a[b]=c;else a[c]=b; }
總結
- 上一篇: 我要带徒弟学架构
- 下一篇: SPA 单页Web应用