Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pprint import pprint
- from colorama import Fore, init
- from tkinter import *
- init(autoreset=True)
- class Dijsktra():
- def __init__(self, graph, start, goal):
- graph = graph
- self.root = Tk()
- self.root.title("TB 2 - Algoritma Dijsktra")
- self.root.geometry("500x150")
- self.root.resizable(width=False, height=False)
- self.dijkstra(graph,start,goal)
- self.root.mainloop()
- def dijkstra(self, graph, start,goal):
- jarak_terpendek = {}
- pendahulu = {}
- unvisitedNodes = graph
- infinity = 9999999
- path = []
- for node in unvisitedNodes:
- jarak_terpendek[node] = infinity
- jarak_terpendek[start] = 0
- while unvisitedNodes:
- minNode = None
- for node in unvisitedNodes:
- if minNode is None:
- minNode = node
- elif jarak_terpendek[node] < jarak_terpendek[minNode]:
- minNode = node
- for childNode, weight in graph[minNode].items():
- if weight + jarak_terpendek[minNode] < jarak_terpendek[childNode]:
- jarak_terpendek[childNode] = weight + jarak_terpendek[minNode]
- pendahulu[childNode] = minNode
- unvisitedNodes.pop(minNode)
- currentNode = goal
- while currentNode != start:
- try:
- path.insert(0, currentNode)
- currentNode = pendahulu[currentNode]
- except IndexError:
- print("Path not reachable")
- break
- path.insert(0,start)
- if jarak_terpendek[goal] != infinity:
- seb = 0
- newPath = {}
- for x in path:
- newPath[x] = jarak_terpendek[x] - seb
- seb = jarak_terpendek[x]
- print("{}Start from : {}{} {}To : {}{}".format(Fore.BLUE, Fore.RED, start.upper(), Fore.BLUE, Fore.YELLOW, goal.upper()))
- print(' -> '.join('{}{} {}({})'.format(Fore.RED, key, Fore.MAGENTA, value) for key, value in newPath.items()))
- print(Fore.WHITE + 'Total Shortest distance is ' + Fore.GREEN + str(jarak_terpendek[goal]))
- frame = LabelFrame(self.root, text=" Izzeldin Addarda - 41519010045 \n Akbar Basyarudin - 41519010046 \n Ridho Aditya N - 41519010050 ", bd=8,fg='white', bg="black")
- Label(frame, text='Jarak dari {} ke {}'.format(start.upper(), goal.upper()), fg='white', bg='black').place(x=0, y=0)
- self.distance_goal = str(jarak_terpendek[goal])
- Label(frame, text='Jarak Terpendek : ' + str(jarak_terpendek[goal]), fg='white', bg='black').place(x=0, y=17)
- Label(frame, text='Jalur yang Optimal : ' + ' -> '.join('{} ({})'.format(key, value) for key, value in newPath.items()), fg='white', bg='black').place(x=0, y=34)
- frame.pack(expand=YES, fill=BOTH)
- graph = {
- 's':{'a':3, 'b':4},
- 'a':{'c':5, 's':3},
- 'b':{'c':2, 's':4},
- 'c':{'d':5, 'f':3, 'a':5, 'b':2},
- 'd':{'e':3, 'c':5},
- 'f':{'e':6, 'c':3},
- 'e':{'f':6, 'd':3}
- }
- print(Fore.GREEN + " --- GRAPH ---")
- pprint(graph)
- print(Fore.CYAN + "# Result : ")
- Dijsktra(graph, 's', 'e')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement