From 09b98e374017549dbc55fa3fbe26444af04ff77f Mon Sep 17 00:00:00 2001 From: bt3gl <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Tue, 8 Aug 2023 16:21:29 -0700 Subject: [PATCH] Update README.md --- graphs/README.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/graphs/README.md b/graphs/README.md index 0a3d6e7..a5a5d8a 100644 --- a/graphs/README.md +++ b/graphs/README.md @@ -212,7 +212,7 @@ def iterative_dfs(graph, v, discovered): --- -### matrix bfs +### matrix bfs and dfs
@@ -223,6 +223,7 @@ def iterative_dfs(graph, v, discovered): * fill empty room with the distance to its nearest gate. if it is impossible to reach a gate, it should be filled with `INF`. +
```python @@ -261,3 +262,78 @@ def matrix_bfs(rooms) -> None: rooms[r][c] = rooms[row][col] + 1 queue.append((r, c)) ``` + +
+ + +* given an `m x n` 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands. + +
+ +```python +def num_island_dfs(grid) -> int: + + LAND = '1' + answer = 0 + + def dfs(row, col): + + if row < 0 or row >= len(grid) or col < 0 or col >= len(grid[0]) or grid[row][col] != LAND: + return + + grid[row][col] = 'x' + dfs(row + 1, col) + dfs(row - 1, col) + dfs(row, col - 1) + dfs(row, col + 1) + + for i in range(len(grid)): + for j in range(len(grid[0])): + if grid[i][j] == LAND: + answer += 1 + dfs(i, j) + + return answer +``` + +
+ +* and a solution for the problem above, using bfs: + +
+ +```python +def num_island_bfs(grid) -> int: + + LAND = '1' + answer = 0 + queue = collections.deque() + + def bfs(row, col, queue): + + delta = [(1, 0), (0, 1), (-1, 0), (0, -1)] + + while queue: + x, y = queue.popleft() + + for dx, dy in delta: + + px, py = x + dx, y + dy + if px < 0 or px >= len(grid) or py < 0 or py >= len(grid[0]) or grid[px][py] != LAND: + continue + + grid[px][py] = 'x' + queue.append((px, py)) + + + for i in range(len(grid)): + for j in range(len(grid[0])): + + if grid[i][j] == LAND: + answer += 1 + queue.append((i, j)) + bfs(i, j, queue) + + + return answer +```