mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
108冗余连接 java实现
This commit is contained in:
@ -176,6 +176,81 @@ int main() {
|
|||||||
|
|
||||||
### Java
|
### Java
|
||||||
|
|
||||||
|
```java
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
private static int[] father;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
int pointNum = scanner.nextInt();
|
||||||
|
father = new int[pointNum + 1];
|
||||||
|
init();
|
||||||
|
for (int i = 0; i < pointNum; i++) {
|
||||||
|
join(scanner.nextInt(), scanner.nextInt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 并查集初始化
|
||||||
|
*/
|
||||||
|
private static void init() {
|
||||||
|
for (int i = 1; i < father.length; i++) {
|
||||||
|
// 让每个元素指向自己
|
||||||
|
father[i] = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 并查集寻根
|
||||||
|
*
|
||||||
|
* @param u
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static int find(int u) {
|
||||||
|
// 判断 u 是否等于自己,如果是的话,直接返回自己
|
||||||
|
// 如果不等于自己,就寻找根,寻找的时候,反复进行路径压缩
|
||||||
|
return u == father[u] ? u : (father[u] = find(father[u]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断 u 和 v 是否同根
|
||||||
|
*
|
||||||
|
* @param u
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static boolean isSame(int u, int v) {
|
||||||
|
return find(u) == find(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加 边 到并查集,v 指向 u
|
||||||
|
*
|
||||||
|
* @param u
|
||||||
|
* @param v
|
||||||
|
*/
|
||||||
|
private static void join(int u, int v) {
|
||||||
|
// --if-- 如果两个点已经同根,说明他们的信息已经存储到并查集中了,直接返回即可
|
||||||
|
// 寻找u的根
|
||||||
|
int uRoot = find(u);
|
||||||
|
// 寻找v的根
|
||||||
|
int vRoot = find(v);
|
||||||
|
if (uRoot == vRoot) {
|
||||||
|
// --if-- 如果u,v的根相同,说明两者已经连接了,直接输出
|
||||||
|
System.out.println(u + " " + v);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// --if-- 将信息添加到并查集
|
||||||
|
father[vRoot] = uRoot;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
Reference in New Issue
Block a user