Newer
Older
"""@package docstring
B-ASIC Operation Module.
TODO: More info.
"""
from typing import Set
from collections import deque
from b_asic.operation import Operation
def breadth_first_search(start: Operation) -> Operation:
"""Use breadth first search to traverse the operation tree."""
visited: Set[Operation] = {start}
queue = deque([start])
while queue:
operation = queue.popleft()
yield operation
for n_operation in operation.neighbours:
if n_operation not in visited:
visited.add(n_operation)
queue.append(n_operation)