[KamaCoder] 并查集理论基础
[KamaCoder] 并查集理论基础
自己看到题目的第一想法
基础理论, 好奇加不知所以.
看完代码随想录之后的想法
核心思想是将所有节点通过整数数组int[] father串起来, father[u] 表示 u 连接到的顶点. 如果 u 和 v 连接到相同的顶点, 则说明 u 和 v 在同一个集合中.
自己实现过程中遇到哪些困难
纯理论.
[KamaCoder] 107. 寻找存在的路径
[KamaCoder] 107. 寻找存在的路径 文章解释
题目描述
给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。
你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。
输入描述
第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。
后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。
最后一行包含两个正整数,代表起始节点 source 和目标节点 destination。
输出描述
输出一个整数,代表是否存在从节点 source 到节点 destination 的路径。如果存在,输出 1;否则,输出 0。
输入示例
5 4 1 2 1 3 2 4 3 4 1 4
输出示例
1
数据范围:
1 <= M, N <= 100。
[KamaCoder] 107. 寻找存在的路径
自己看到题目的第一想法
并查集基础理论基础应用篇.
看完代码随想录之后的想法
import java.util.Scanner;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Set;public class Main {private static int[] father;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int nodeCount = scanner.nextInt();int sideCount = scanner.nextInt();init(nodeCount);for(int i = 0; i < sideCount; i++) {join(scanner.nextInt(), scanner.nextInt());}if (isSame(scanner.nextInt(), scanner.nextInt())) {System.out.println(1);} else {System.out.println(0);}return;}System.out.println(0);}private static void init(int nodeCount) {father = new int[nodeCount + 1];for (int i = 0; i < nodeCount; i++) {father[i] = i;}}private static boolean isSame(int u, int v) {return find(u) == find(v);}private static int find(int u) {if (u == father[u]) {return u;}return father[u] = find(father[u]);}private static void join(int u, int v) {u = find(u);v = find(v);if (u == v) {return;}father[v] = u;}
}
自己实现过程中遇到哪些困难
无.