На случай, если кому-то интересно, вот код, который я придумал:
def dfs(root, colorings):
to_visit1 = deque()
to_visit2 = deque()
to_visit1.append(root)
while len(to_visit1) != 0 or len(to_visit2) != 0:
dfs_color(to_visit1, to_visit2, True, colorings)
dfs_color(to_visit2, to_visit1, False, colorings)
def dfs_color(queue, opposite_queue, color, colorings):
while len(queue) != 0:
v = queue.pop()
if v in adjacency_list:
colorings[v] = color
neighbors = adjacency_list[v]
del adjacency_list[v]
for neighbor in neighbors:
opposite_queue.append(neighbor)
Правда, это не мой лучший код. Я использую True
/ False
в качестве цвета, потому что когда я использовал рекурсию, мне было легко просто сказать not color
. Конечно, я должен был изменить это, потому что я разбил свой стек на больших графиках. Кроме того, чтобы отдать должное, этот код основан на коде википедии для DFS .
Хотя, как уже указывалось, я думаю, что это может быть просто замаскированная BFS.