Switch back to recursive DFS and check for empty graph

Signed-off-by: Aadit Kamat <aadit.k12@gmail.com>
pull/137/head
Aadit Kamat 6 years ago
parent 54defd7b24
commit 0e33d69365

@ -32,12 +32,9 @@ In coding interviews, graphs are commonly represented as 2-D matrices where cell
A simple template for doing depth-first searches on a matrix goes like this:
```py
from collections import deque
def dfs(matrix):
# check for an empty graph
if len(matrix) == 0:
if not matrix:
return []
rows, cols = len(matrix), len(matrix[0])
visited = set()
@ -49,20 +46,17 @@ def dfs(matrix):
return i in range(rows) and j in range(cols) and (i, j) not in visited
def traverse(i, j):
stack = deque([(i, j)])
while stack:
curr_i, curr_j = stack.pop()
if pass_all_conditions(curr_i, curr_j):
visited.add((curr_i, curr_j))
# Traverse neighbors
for direction in directions:
next_i, next_j = curr_i + direction[0], curr_j + direction[1]
stack.append((next_i, next_j))
if not pass_all_conditions(i, j):
return
visited.add((i, j))
# Traverse neighbors
for direction in directions:
next_i, next_j = i + direction[0], j + direction[1]
traverse(next_i, next_j)
for i in range(rows):
for j in range(cols):
traverse(i, j)
```
Another similar template for doing breadth first searches on the matrix goes like this:
@ -73,7 +67,7 @@ from collections import deque
def bfs(matrix):
# check for an empty graph
if len(matrix) == 0:
if not matrix:
return []
rows, cols = len(matrix), len(matrix[0])
visited = set()

Loading…
Cancel
Save