Skip to content

Commit 3a97276

Browse files
committed
Quick Find
1 parent 6f5c9c6 commit 3a97276

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

UnionFind/src/UF.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
public interface UF {
2+
3+
int getSize();
4+
5+
boolean isConnected(int p, int q);
6+
7+
void unionElements(int p, int q);
8+
}

UnionFind/src/UnionFind1.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
public class UnionFind1 implements UF {
2+
private int[] id;
3+
4+
public UnionFind1(int size) {
5+
id = new int[size];
6+
for (int i = 0; i < id.length; i++) {
7+
id[i] = i;
8+
}
9+
}
10+
11+
@Override
12+
public int getSize() {
13+
return id.length;
14+
}
15+
16+
// 查找 元素p所对应的集合编号
17+
private int find(int p) {
18+
if (p < 0 && p >= id.length) {
19+
throw new IllegalArgumentException("p is out of bound");
20+
}
21+
return id[p];
22+
}
23+
24+
25+
// 查看元素p和元素q是否所属一个集合
26+
@Override
27+
public boolean isConnected(int p, int q) {
28+
return find(p) == find(q);
29+
}
30+
31+
// 合并元素p和元素q所属的集合
32+
@Override
33+
public void unionElements(int p, int q) {
34+
int pID = find(p);
35+
int qID = find(q);
36+
37+
if (pID == qID) {
38+
return;
39+
}
40+
41+
for (int i = 0; i < id.length; i++) {
42+
if (id[i] == pID) {
43+
id[i] = qID;
44+
}
45+
}
46+
47+
}
48+
}

0 commit comments

Comments
 (0)