BFS Traversal
Unlike DFS, Breadth First Search doesn't use recursion, it uses
queue.
We can start at any vertex and run the
loop until the queue is empty.
from collections import deque
def bfs_traverse(starting_vertex):
queue = deque()
visited = []
visited.append(starting_vertex.value)
queue.append(starting_vertex)
while bool(queue) == True:
current_vertex = queue.popleft()
for v in current_vertex.adjacent_vertices:
if v.value in visited:
continue
visited.append(v.value)
queue.append(v)
return visited
print([x for x in bfs_traverse(a)])
print([x for x in bfs_traverse(f)])
DFS vs BFS
When we want to move far
away quickly, we use DFS.
When we want to stay
close to the starting point, we use BFS.
def dfs_traverse2(vertex, visited=None, level=0):
if visited is None:
visited = []
if level == 2:
return visited
if level > 0:
visited.append(vertex.value)
for v in vertex.adjacent_vertices:
if v.value in visited:
continue
dfs_traverse2(v, visited, level+1)
return visited
print('Alice\'s direct friends:', [x for x in dfs_traverse2(a)])
print('Helen\'s direct friends:', [x for x in dfs_traverse2(h)])