并查集

来源:互联网 发布:javascript 跳转页面 编辑:程序博客网 时间:2024/06/04 17:42
#include <iostream>using namespace std;int node[1000];void init(int n){    for(int i=1; i<=n; i++)        node[i]=i;}int find(int x){    if(x==node[x])        return x;    return node[x]=find(node[x]);//压缩路径,!!!递归容易导致栈溢出    /*    或者    if(x!=node[x])    {      node[x]=find(node[x]);//压缩路径    }    return node[x];    */}void merge(int x,int y){    x=find(x);    y=find(y);    if(x==y)        return;    else if(x<y)    {        node[y]=x;    }    else    {        node[x]=y;    }}int main(){    init(5);    merge(1,2);    merge(3,4);    merge(2,3);    merge(3,5);    for(int i=1; i<=5; i++)        cout<<node[i]<<endl;    return 0;}

0 0
原创粉丝点击