Advertisement
Guest User

Untitled

a guest
May 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. distances1 = {
  2. 'B': {'A': 5, 'D': 1, 'G': 2},
  3. 'A': {'B': 5, 'D': 3, 'E': 12, 'F' :5},
  4. 'D': {'B': 1, 'G': 1, 'E': 1, 'A': 3},
  5. 'G': {'B': 2, 'D': 1, 'C': 2},
  6. 'C': {'G': 2, 'E': 1, 'F': 16},
  7. 'E': {'A': 12, 'D': 1, 'C': 1, 'F': 2},
  8. 'F': {'A': 5, 'E': 2, 'C': 16}}
  9.  
  10. graph = {'A': {'C': 1, 'D': 2},
  11. 'B': {'C': 2, 'F': 3},
  12. 'C': {'A': 1, 'B': 2, 'D': 1, 'E': 3},
  13. 'D': {'A': 2, 'C': 1, 'G': 1},
  14. 'E': {'C': 3, 'F': 2},
  15. 'F': {'B': 3, 'E': 2, 'G': 1},
  16. 'G': {'D': 1, 'F': 1}
  17. }
  18.  
  19. Q = {} # do odwiedzenia
  20. S = [] # odwiedzone
  21. P = {} # poprzednicy
  22.  
  23. def dijkstra(graph, src, dst, Q = {}, S = [], P = {}):
  24.  
  25. # init
  26. if not S: # pusta lista
  27. for v in graph:
  28. Q[v] = 9999 #float('inf') # wszystkie inne na nieskonczonosc
  29. P[v] = -1 # nie mamy poprzednikow
  30. Q[src] = 0 # wierzcholek startowy na 0
  31.  
  32. # drukowanie sciezki
  33.  
  34. if not Q:
  35. path = []
  36. prev = 0
  37. i = 0
  38. path.append(dst)
  39. while prev != src:
  40. prev = P[path[i]]
  41. path.append(prev)
  42. i += 1
  43. print(path[::-1])
  44. return None
  45.  
  46. # dijkstra
  47.  
  48. vmin = min(Q, key=Q.get) # szukamy wierzcholka o najmniejszej wartosci
  49.  
  50. S.append(vmin) # przenosimy wierzcholek do S
  51. temp = Q[vmin]
  52. del Q[vmin] # usuwamy go z Q
  53. for n in graph[vmin]: # szukamy z listy sasiadow
  54. if n not in Q: # jesli jest na liscie to idziemy dalej
  55. continue
  56. if Q[n] > temp + graph[vmin][n]: # wartosc sasiada wieksza niz graf
  57. Q[n] = temp + graph[vmin][n]
  58. P[n] = vmin
  59.  
  60. dijkstra(graph, src, dst, Q, S, P)
  61.  
  62.  
  63.  
  64. dijkstra(graph, 'A', 'F')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement