并查集的实现
2016-02-29 09:59
288 查看
并查集用于解决元素集合中,元素关系的集合的问题。例如给出两两关系,最后看整个集合中,谁是一伙的,有关系的。
// // union_find.c // calc // // Created by lixia on 16/2/28. // Copyright © 2016年 qll. All rights reserved. // #include <stdio.h> int n,m,pre[1000]; int find(int x) { // find leader int r = x; while( pre[r] > 0 ) r = pre[r]; int i = x, j; // comp while ( i != r ) { j = pre[i]; pre[i] = r; i = j; } return r; } void unionset(int n, int m) { int fx = find(n); int fy = find(m); pre[fx] = fy; } void test(int argc, const char*argv[]) { printf("n="); while (scanf("%d",&n),n) { printf("\nm="); scanf("%d",&m); for (int i = 0; i < n; i++) { pre[i] = -1; } int x, y; for (int j = 0; j < m; j++) { printf("x y"); scanf("%d %d", &x, &y); unionset(x, y); } int count = 0; for (int g = 0; g < n; g++) { if (pre[g]>0 && pre[pre[g]]==-1) { count++; pre[pre[g]] = -2; } } for (int k = 0; k < n; k++) { for (int l=0; l < n; l++) { if ((k==find(l) && pre[k]<0 && k!=l) || (k==l&&pre[l]==-2)) { printf("%d ",l); } } printf("\n"); } printf("group =%d", count); } }
相关文章推荐
- <link rel="stylesheet" href="3.css"/> 链接方式
- bootstrap基础学习九篇
- 二叉树遍历问题:已知中序遍历和后序遍历结果,求前序遍历结果
- Delphi 7 调用 C# WebService
- 在PHP语言中使用JSON
- PHP开发中常见的漏洞及防范
- 对MTK安卓平台LCM驱动的理解
- Thinkphp5.0中自动生成模块以及目录方案
- 浅拷贝造成的内存 被重复释放
- Android 5.1 Camera 架构学习(一)——Camera初始化
- 网络协议之TCP
- 《C++ Primer》之重载操作符与转换(中)
- 学习方法
- 学习方法
- JAVA学习20160229
- 分支预测
- 基于Django的独立运行脚本开发
- socket一个完整的过程中TCP的11中状态
- JS中的call()和apply()方法
- iOS中监控软键盘显示或隐藏的可靠方法