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