diff --git a/matrix/count_islands_in_matrix.py b/matrix/count_islands_in_matrix.py index 64c595e84..9e98b4418 100644 --- a/matrix/count_islands_in_matrix.py +++ b/matrix/count_islands_in_matrix.py @@ -4,12 +4,43 @@ class Matrix: # Public class to implement a graph - def __init__(self, row: int, col: int, graph: list[list[bool]]) -> None: - self.ROW = row - self.COL = col + def __init__(self, graph: list[list[bool]]) -> None: + """ + Initialise matrix with number of rows, columns, and graph. + + >>> m = Matrix([[True, False, False, False], + ... [True, False, True, False], + ... [False, False, True, True]]) + >>> m.ROW + 3 + >>> m.COL + 4 + >>> m.graph + [[True, False, False, False], + ...[True, False, True, False], + ...[False, False, True, True]] + """ self.graph = graph + self.ROW = len(graph) + self.COL = len(graph[0]) def is_safe(self, i: int, j: int, visited: list[list[bool]]) -> bool: + """ + >>> visited = [[False, False, False], + ... [False, False, False], + ... [False, False, False]] + >>> m = Matrix([[True, False, False], + ... [False, False, True], + ... [False, False, True]]) + >>> m.is_safe(0, 0, visited) + True + >>> m.is_safe(0, 2, visited) + False + >>> m.is_safe(-1, 2, visited) + False + >>> m.is_safe(1, 5, visited) + False + """ return ( 0 <= i < self.ROW and 0 <= j < self.COL @@ -18,7 +49,21 @@ class Matrix: # Public class to implement a graph ) def diffs(self, i: int, j: int, visited: list[list[bool]]) -> None: - # Checking all 8 elements surrounding nth element + """ + Checking all 8 elements surrounding nth element. + + >>> visited = [[False, False, False], + ... [False, False, False], + ... [False, False, False]] + >>> m = Matrix([[True, True, False], + ... [False, True, False], + ... [True, False, True]]) + >>> m.diffs(0, 0, visited) + >>> visited + [[True, True, False], + ...[False, True, False], + ...[True, False, True]] + """ row_nbr = [-1, -1, -1, 0, 0, 1, 1, 1] # Coordinate order col_nbr = [-1, 0, 1, -1, 1, -1, 0, 1] visited[i][j] = True # Make those cells visited @@ -26,12 +71,24 @@ class Matrix: # Public class to implement a graph if self.is_safe(i + row_nbr[k], j + col_nbr[k], visited): self.diffs(i + row_nbr[k], j + col_nbr[k], visited) - def count_islands(self) -> int: # And finally, count all islands. + def count_islands(self) -> int: + """ + >>> m = Matrix([[True, True, False, False], + ... [False, True, False, True], + ... [True, False, False, True]]) + >>> m.count_islands() + 2 + >>> m2 = Matrix([[True, True, False], + ... [True, False, False], + ... [False, False, True]]) + >>> m2.count_islands() + 2 + """ visited = [[False for j in range(self.COL)] for i in range(self.ROW)] count = 0 for i in range(self.ROW): for j in range(self.COL): - if visited[i][j] is False and self.graph[i][j] == 1: + if not visited[i][j] and self.graph[i][j]: self.diffs(i, j, visited) count += 1 return count