#https://i...content-available-to-author-only...e.com/g0uzuw # #Dijkstrov algoritmus na najdenie najkratsej cesty z jedneho vrcholu do vsetkych # #n m - rozmery, pocet vrcholov a hran #v1 v2 vzd - pre kazdu hranu 2 vrcholy a ich vzdialenost #v - pociatocny vrchol import queue n, m = [int(_) for _ in input().split()] susedia = {} #slovnik vrchol -> zoznam hran ako dvojica (vzdialenost, vrchol) vzdialenosti = {} for i in range(n): #pre vsetky vrcholy A,B,... x = chr(ord('A')+i) #i-te pismeno v poradi susedia[x] = [] #prazdny zoznam susedov vrchola x vzdialenosti[x] = float('inf') #nekonecno print(susedia) print(vzdialenosti) for _ in range(m): #vsetky hrany v1, v2, vzd = [_ for _ in input().split()] vzd = int(vzd) susedia[v1].append( (vzd, v2) ) susedia[v2].append( (vzd, v1) ) v = input() print(n, m) print(v) for s in susedia: print(s, susedia[s]) mesta = queue.PriorityQueue() #prioritny rad na vyber vzdy najmensej vzdialenosti mesta.put( (0, v) ) #zaciname vo vrchole v so vzdialenostou 0 while not mesta.empty(): #pokial mame dalsie mesto na spracovanie vzd, mesto = mesta.get() #vyberieme dvojicu mesto a vzdialenost od pociatku print(vzd, mesto) if vzd < vzdialenosti[mesto]: #ak sme nasli kratsiu cestu vzdialenosti[mesto] = vzd #aktualizujeme na novu, kratsiu, vzdialenost for sused in susedia[mesto]: #pridame hrany k susedom #sused je dvojica (vzdialenost, vrchol) #print(sused) if vzd+sused[0] < vzdialenosti[sused[1]]: #vloz iba ak je to kratsie! mesta.put( (vzd+sused[0], sused[1]) ) #pridame novu vzdialenost k susedovi print(vzdialenosti)
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
{'A': [], 'E': [], 'B': [], 'D': [], 'F': [], 'C': [], 'G': []} {'A': inf, 'E': inf, 'B': inf, 'D': inf, 'F': inf, 'C': inf, 'G': inf} 7 11 D A [(7, 'B'), (5, 'D')] E [(7, 'B'), (5, 'C'), (15, 'D'), (8, 'F'), (9, 'G')] 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')] C [(8, 'B'), (5, 'E')] G [(9, 'E'), (11, 'F')] 0 D 5 A 6 F 9 B 12 B 14 E 15 E 16 E 17 C 17 G 19 C 23 G {'A': 5, 'E': 14, 'B': 9, 'D': 0, 'F': 6, 'C': 17, 'G': 17}