fork(5) download
  1. #https://i...content-available-to-author-only...e.com/54GWZA
  2.  
  3. #pocitame najmensie vzdialenosti z jedneho vrchola do vsetkych
  4. #
  5. #n, m - pocet vrcholov a hran; vrcholy pismena od 'A'
  6. #v1 v2 vzd - 2 vrcholy a vzdialenost medzi nimi pre kazdu hranu
  7. #v - pociatocny vrchol
  8.  
  9. import queue
  10.  
  11. n, m = [int(_) for _ in input().split()]
  12. susedia = {}
  13. vzdialenosti = {}
  14. for x in range(n):
  15. susedia[chr(ord('A')+x)] = [] # x-te pismeno v poradi
  16. vzdialenosti[chr(ord('A')+x)] = float('inf') #nekonecno
  17. print(susedia)
  18. print(vzdialenosti)
  19. for i in range(m):
  20. v1,v2,vzd = [_ for _ in input().split()]
  21. vzd = int(vzd)
  22. susedia[v1].append( (vzd, v2) )
  23. susedia[v2].append( (vzd, v1) )
  24. v = input()
  25.  
  26. print(n, m)
  27. print(v)
  28. for s in susedia:
  29. print(s, susedia[s])
  30. #pocitanie najkratsej cesty
  31. mesta = queue.PriorityQueue() #prioritny rad pre mesta a ich vzdialenosti od pociatku
  32.  
  33. mesta.put( (0, v) ) #do vrcholu v sa vieme dostat cestou dlzky 0
  34. while not mesta.empty():
  35. vzd, m = mesta.get() #
  36. if vzd < vzdialenosti[m]: #nasli sme kratsiu cestu
  37. vzdialenosti[m] = vzd #zapiseme ju
  38. for h in susedia[m]: #hrany k susedom
  39. c, v = h #c = vzdialenost z m do v
  40. mesta.put( (c+vzd, v) )
  41. print(vzdialenosti)
  42.  
  43.  
Success #stdin #stdout 0.02s 28072KB
stdin
7 11
A B 7
A D 5
B C 8
B D 9
B E 7
C E 5
D E 15
D F 6
E F 8
E G 9
F G 11
D
stdout
{'A': [], 'G': [], 'B': [], 'D': [], 'F': [], 'E': [], 'C': []}
{'A': inf, 'G': inf, 'B': inf, 'D': inf, 'F': inf, 'E': inf, 'C': inf}
7 11
D
A [(7, 'B'), (5, 'D')]
G [(9, 'E'), (11, 'F')]
B [(7, 'A'), (8, 'C'), (9, 'D'), (7, 'E')]
D [(5, 'A'), (9, 'B'), (15, 'E'), (6, 'F')]
F [(6, 'D'), (8, 'E'), (11, 'G')]
E [(7, 'B'), (5, 'C'), (15, 'D'), (8, 'F'), (9, 'G')]
C [(8, 'B'), (5, 'E')]
{'A': 5, 'G': 17, 'B': 9, 'D': 0, 'F': 6, 'E': 14, 'C': 17}