From c5bf7411dad6ac2bdcdb5981d06ceca15f372d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=92=D0=B0=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=B5=D0=B2?= Date: Sun, 26 Apr 2026 20:06:29 +0300 Subject: [PATCH] feat: 547. Number of Provinces --- src/graphs/number_of_provinces/__init__.py | 0 src/graphs/number_of_provinces/solution.py | 15 +++++++++++++++ tests/test_number_of_provinces.py | 11 +++++++++++ 3 files changed, 26 insertions(+) create mode 100644 src/graphs/number_of_provinces/__init__.py create mode 100644 src/graphs/number_of_provinces/solution.py create mode 100644 tests/test_number_of_provinces.py diff --git a/src/graphs/number_of_provinces/__init__.py b/src/graphs/number_of_provinces/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/graphs/number_of_provinces/solution.py b/src/graphs/number_of_provinces/solution.py new file mode 100644 index 0000000..70a69e5 --- /dev/null +++ b/src/graphs/number_of_provinces/solution.py @@ -0,0 +1,15 @@ +class Solution: + def dfs(self, node: int, isConnected: list[list[int]], visited: list[bool]): + visited[node] = True + for i in range(len(isConnected)): + if isConnected[node][i] and not visited[i]: + self.dfs(i, isConnected, visited) + + def findCircleNum(self, isConnected: list[list[int]]) -> int: + provinces = 0 + visited = [False] * len(isConnected) + for i in range(len(isConnected)): + if not visited[i]: + provinces += 1 + self.dfs(i, isConnected, visited) + return provinces diff --git a/tests/test_number_of_provinces.py b/tests/test_number_of_provinces.py new file mode 100644 index 0000000..b873fba --- /dev/null +++ b/tests/test_number_of_provinces.py @@ -0,0 +1,11 @@ +import pytest +from src.graphs.number_of_provinces.solution import Solution + + +@pytest.mark.parametrize( + "isConnected, expected", + [([[1, 1, 0], [1, 1, 0], [0, 0, 1]], 2), ([[1, 0, 0], [0, 1, 0], [0, 0, 1]], 3)], +) +def test_number_of_provinces(isConnected, expected): + solution = Solution() + assert solution.findCircleNum(isConnected) == expected