Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- distances1 = {
- 'B': {'A': 5, 'D': 1, 'G': 2},
- 'A': {'B': 5, 'D': 3, 'E': 12, 'F' :5},
- 'D': {'B': 1, 'G': 1, 'E': 1, 'A': 3},
- 'G': {'B': 2, 'D': 1, 'C': 2},
- 'C': {'G': 2, 'E': 1, 'F': 16},
- 'E': {'A': 12, 'D': 1, 'C': 1, 'F': 2},
- 'F': {'A': 5, 'E': 2, 'C': 16}}
- graph = {'A': {'C': 1, 'D': 2},
- 'B': {'C': 2, 'F': 3},
- 'C': {'A': 1, 'B': 2, 'D': 1, 'E': 3},
- 'D': {'A': 2, 'C': 1, 'G': 1},
- 'E': {'C': 3, 'F': 2},
- 'F': {'B': 3, 'E': 2, 'G': 1},
- 'G': {'D': 1, 'F': 1}
- }
- Q = {} # do odwiedzenia
- S = [] # odwiedzone
- P = {} # poprzednicy
- def dijkstra(graph, src, dst, Q = {}, S = [], P = {}):
- # init
- if not S: # pusta lista
- for v in graph:
- Q[v] = 9999 #float('inf') # wszystkie inne na nieskonczonosc
- P[v] = -1 # nie mamy poprzednikow
- Q[src] = 0 # wierzcholek startowy na 0
- # drukowanie sciezki
- if not Q:
- path = []
- prev = 0
- i = 0
- path.append(dst)
- while prev != src:
- prev = P[path[i]]
- path.append(prev)
- i += 1
- print(path[::-1])
- return None
- # dijkstra
- vmin = min(Q, key=Q.get) # szukamy wierzcholka o najmniejszej wartosci
- S.append(vmin) # przenosimy wierzcholek do S
- temp = Q[vmin]
- del Q[vmin] # usuwamy go z Q
- for n in graph[vmin]: # szukamy z listy sasiadow
- if n not in Q: # jesli jest na liscie to idziemy dalej
- continue
- if Q[n] > temp + graph[vmin][n]: # wartosc sasiada wieksza niz graf
- Q[n] = temp + graph[vmin][n]
- P[n] = vmin
- dijkstra(graph, src, dst, Q, S, P)
- dijkstra(graph, 'A', 'F')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement