算法 1.5节:带路径压缩的加权并查集
2018-01-01 21:20
155 查看
import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; public class UF_1 { private int[] id; private int[]sz; private int count; public UF_1(int N) { count=N; id = new int ; for(int i = 0; i<N ; i++) id[i]=i; sz = new int ; for(int i=0;i<N;i++) sz[i]=1; } public void union(int p, int q) { int i = find(p); int j = find(q); if ( i== j ) return; if(sz[p]<sz[q]) { id[i] = j; sz[j] += sz[i]; } else { id[j] =i; sz[i] = sz[j]; } count--; } public int find (int p) { while(p != id[p]) { id[p]=id[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) { int N = StdIn.readInt(); UF_1 uf = new UF_1(N); while (!StdIn.isEmpty()) { int p = StdIn.readInt(); int q = StdIn.readInt(); if (uf.connected(p, q)) continue; uf.union(p, q); StdOut.println(p + " " + 4000 q); } StdOut.println(uf.count() + "components"); } }
相关文章推荐
- 并查集。路径压缩 算法运用学习(一)
- 【算法】并查集—带路径压缩的按秩合并法
- 加权路径压缩并查集实现
- 并查集算法和路径压缩
- 算法代码实现之Union-Find,C++实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- 算法训练 安慰奶牛 (并查集—路径压缩、Kruskal算法)
- 算法代码实现之Union-Find,Golang(Go语言)实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- 并查集算法和路径压缩
- [算法第一轮复习] 并查集 + 路径压缩
- 【转】并查集算法和路径压缩
- union-find算法——使用路径压缩的加权quick-union算法实现
- 算法代码实现之Union-Find,Java实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- 【转】并查集算法和路径压缩
- JAVA算法4――连通性问题之路径压缩的加权快速合并算法
- Corporative Network UVA - 1329 加权并查集(压缩路径优化)
- 【转】并查集算法和路径压缩
- 并查集的路径压缩算法
- 并查集 路径压缩
- 并查集--路径压缩
- 并查集路径压缩