From 393b6545647f7c5c6ce3f8f5e370ff99916962c6 Mon Sep 17 00:00:00 2001 From: Nikhil I <66690978+ironnicko@users.noreply.github.com> Date: Thu, 7 Jul 2022 04:10:41 +0530 Subject: [PATCH] Added Python Code for Number of Connected Components In An Undirected Graph --- ...ected_components_in_an_undirected_graph.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 number_of_connected_components_in_an_undirected_graph.py diff --git a/number_of_connected_components_in_an_undirected_graph.py b/number_of_connected_components_in_an_undirected_graph.py new file mode 100644 index 000000000..061e8d457 --- /dev/null +++ b/number_of_connected_components_in_an_undirected_graph.py @@ -0,0 +1,33 @@ +from typing import List + + +class Solution: + def count_components(self, n: int, edges: List[List[int]]) -> int: + parent = [i for i in range(n)] + rank = [1] * n + + def find_union(node: int) -> None: + result = node + while result != parent[result]: + parent[result] = parent[parent[result]] # path compression + result = parent[result] + return result + + def union(node_1: int, node_2: int): + parent_1 = find_union(node_1) + parent_2 = find_union(node_2) + if parent_1 == parent_2: + return 0 + if rank[parent_2] < rank[parent_1]: + parent[parent_1] = parent_2 + rank[parent_2] += rank[parent_1] + else: + parent[parent_2] = parent_1 + rank[parent_1] += rank[parent_2] + return 1 + + result = n + for node_1, node_2 in edges: + result -= union(node_1, node_2) + return result +