union-find算法
来源:互联网 发布:交换机端口抓包 编辑:程序博客网 时间:2024/05/16 11:50
一、quick-find:
import java.util.Scanner;public class UF //quick-find{private int[] id;private int count;public UF(int N){count = N;id = new int[N];for (int i = 0; i < N; i++)id[i] = i;}public void union(int p, int q){int pID = id[p];int qID = id[q];if (pID == qID) return;for (int i = 0; i < id.length; i ++)if (id[i] == pID) id[i] = qID;count--;return;}public int find(int p){ return id[p];}public boolean connected(int p, int q){return find(p) == find(q);}public int count(){return count;}public static void main(String[] args){// TODO Auto-generated method stubScanner input = new Scanner(System.in);int N = input.nextInt();UF uf = new UF(N);while (input.hasNextInt()){int p = input.nextInt();int q = input.nextInt();if (uf.connected(p, q)) continue;else uf.union(p, q);}System.out.println(uf.count() + "components");}}二、quick-union:
import java.util.Scanner;public class UF //quick-union{private int[] id;private int count;public UF(int N){count = N;id = new int[N];for (int i = 0; i < N; i++)id[i] = i;}public void union(int p, int q){int pRoot = find(p);int qRoot = find(q);if (pRoot == qRoot) return;id[pRoot] = qRoot;count--;return;}public int find(int p){ while (p != id[p]) p = id[p]; return p;}public boolean connected(int p, int q){return find(p) == find(q);}public int count(){return count;}public static void main(String[] args){// TODO Auto-generated method stubScanner input = new Scanner(System.in);int N = input.nextInt();UF uf = new UF(N);while (input.hasNextInt()){int p = input.nextInt();int q = input.nextInt();if (uf.connected(p, q)) continue;else uf.union(p, q);}System.out.println(uf.count() + "components");}}三加权 quick-union;
import java.util.Scanner;public class UF //quick-union{private int[] id;private int count;private int[] sz;public UF(int N){count = N;id = new int[N];sz = new int[N];for (int i = 0; i < N; i++)id[i] = i;for (int i = 0; i < N; i++)sz[i] = 1;}public void union(int p, int q){int pRoot = find(p);int qRoot = find(q);if (pRoot == qRoot) return;if (sz[pRoot] < sz[qRoot]) {id[pRoot] = qRoot; sz[qRoot] += sz[pRoot];}else {id[qRoot] = pRoot; sz[pRoot] += sz[qRoot];}//id[pRoot] = qRoot;count--;return;}public int find(int p){ while (p != id[p]) p = id[p]; return p;}public boolean connected(int p, int q){return find(p) == find(q);}public int count(){return count;}public static void main(String[] args){// TODO Auto-generated method stubScanner input = new Scanner(System.in);int N = input.nextInt();UF uf = new UF(N);while (input.hasNextInt()){int p = input.nextInt();int q = input.nextInt();if (uf.connected(p, q)) continue;else uf.union(p, q);}System.out.println(uf.count() + "components");}}
0 0
- Union-Find 算法实现
- 四、union-find算法
- Union Find算法
- union-find算法
- UNION-FIND算法
- Union-find算法(algs4)
- union find算法
- union-find算法
- 算法(1):Union-Find
- Union-Find算法
- 1.3:Union-Find算法-----quick-union算法
- 【算法学习】union-find算法
- [算法8]union find算法
- 算法学习--Union-Find算法
- 1.3:Union-Find算法-----quick-find算法
- union-find中(quick-union)算法
- union-find下(加权quick-union)算法
- Union-Find算法学习笔记
- jedis(redis)整合spring,包括jedis客户端单机版,jedis集群版配置 ,连接池配置
- hql 语法与详细解释
- 借鉴面试总结
- 数据库中范式和反范式
- glusterFS的部署流程
- union-find算法
- 2017.2.25.期末测评(?)2测试总结
- 决策树算法及代码
- 20170225#cs231n#3.最优化问题
- input和raw_input有何不同?
- C++11(一):在类的定义时初始化非静态变量
- RecyclerView的基本用法
- Qt修炼手册5_文件输入输出
- GlusterFS学习