fork download
  1. def dfs_paths(graph, start, goal, path=list()):
  2. if not path:
  3. path.append(start)
  4. if start == goal:
  5. yield path
  6. for vertex in graph[start] - set(path):
  7. yield from dfs_paths(graph, vertex, goal, path=path + [vertex])
  8. graph = {
  9. 'A': set(['B', 'C']),
  10. 'B': set(['A', 'D', 'E']),
  11. 'C': set(['A', 'F']),
  12. 'D': set(['B']),
  13. 'E': set(['B', 'F']),
  14. 'F': set(['C', 'E']),
  15. }
  16. print(repr([path for path in dfs_paths(graph, 'A', 'F')]))
  17. print(repr([path for path in dfs_paths(graph, 'A', 'F')]))
  18. print(repr([path for path in dfs_paths(graph, 'F', 'A')]))
  19. print(repr([path for path in dfs_paths(graph, 'F', 'A')]))
  20. print()
  21. print(repr([path for path in dfs_paths(graph, 'A', 'F', [])]))
  22. print(repr([path for path in dfs_paths(graph, 'A', 'F', [])]))
  23. print(repr([path for path in dfs_paths(graph, 'F', 'A', [])]))
  24. print(repr([path for path in dfs_paths(graph, 'F', 'A', [])]))
  25.  
Success #stdin #stdout 0.02s 8736KB
stdin
Standard input is empty
stdout
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[]
[]

[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['F', 'E', 'B', 'A'], ['F', 'C', 'A']]
[['F', 'E', 'B', 'A'], ['F', 'C', 'A']]