Да, это DFS.
Чтобы написать BFS, вам просто нужно сохранить очередь "todo".Вы, вероятно, также захотите превратить функцию в генератор, потому что часто BFS преднамеренно завершается, прежде чем он генерирует все возможные пути.Таким образом, эта функция может быть использована как find_path или find_all_paths.
def paths(graph, start, end):
todo = [[start, [start]]]
while 0 < len(todo):
(node, path) = todo.pop(0)
for next_node in graph[node]:
if next_node in path:
continue
elif next_node == end:
yield path + [next_node]
else:
todo.append([next_node, path + [next_node]])
И пример использования:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
for path in paths(graph, 'A', 'D'):
print path