12_paths.py 769 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env python3
  2. import sys
  3. def parse(f):
  4. graph = {}
  5. for line in f:
  6. a, b = line.rstrip().split('-')
  7. graph.setdefault(a, []).append(b)
  8. graph.setdefault(b, []).append(a)
  9. return graph
  10. def paths(graph, may_dup):
  11. work = [(('start',), not may_dup)]
  12. distinct = 0
  13. while work:
  14. path, dup = work.pop()
  15. if path[-1] == 'end':
  16. distinct += 1
  17. else:
  18. for nb in graph[path[-1]]:
  19. if nb.isupper() or nb not in path:
  20. work.append((path + (nb,), dup))
  21. elif not dup and nb != 'start':
  22. work.append((path + (nb,), True))
  23. return distinct
  24. graph = parse(sys.stdin)
  25. print(paths(graph, False))
  26. print(paths(graph, True))