09_travellingsalesman.py 643 B

123456789101112131415161718192021222324
  1. #!/usr/bin/env python3
  2. import sys
  3. import re
  4. from itertools import permutations
  5. graph = {}
  6. for line in sys.stdin:
  7. src, dest, dist = re.match(r'(\w+) to (\w+) = (\d+)', line).groups()
  8. graph.setdefault(src, {})[dest] = int(dist)
  9. graph.setdefault(dest, {})[src] = int(dist)
  10. def pathlength(path):
  11. length = 0
  12. for i, node in enumerate(path[:-1]):
  13. connections = graph[node]
  14. nextnode = path[i + 1]
  15. if nextnode not in connections:
  16. return
  17. length += connections[nextnode]
  18. return length
  19. lens = list(filter(None, map(pathlength, permutations(graph))))
  20. print(min(lens))
  21. print(max(lens))