并查集
2016-09-12 20:00
302 查看
#include <stdio.h> #include <stdlib.h> #define maxsize 100 //上一级节点/集合中元素的个数 int father[maxsize],rank[maxsize]; //初始化 void init(int _size) { for(int i=0;i<_size;i++) { father[i]=i; rank[i]=1; } } //查找根节点/压缩路径 int find_set(int node) { /* while(father[node] != node) { node=father[node]; }*/ if(father[node] != node) father[node]=find_set(father[node]); return father[node]; } //合并节点 void _union(int p,int q) { int root1=find_set(p); int root2=find_set(q); if(root1 == root2) return ; if(rank[root1] >= rank[root2]) { father[root2]=root1; rank[root1] += rank[root2]; } else { father[root1]=root2; rank[root2] += rank[root1]; } } int main() { int _size; int a,b; while(~scanf("%d",&_size)) { init(_size); for(int i=0;i<5;i++) { scanf("%d %d",&a,&b); _union(a,b); } for(int i=0;i<_size;i++) { find_set(i); printf("i=%d father=%d rank=%d\n",i,father[i],rank[i]); } } }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)