Advertisement
0xCor3

tb2

Dec 10th, 2020
846
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.24 KB | None | 0 0
  1. from pprint import pprint
  2. from colorama import Fore, init
  3. from tkinter import *
  4.  
  5. init(autoreset=True)
  6. class Dijsktra():
  7.     def __init__(self, graph, start, goal):
  8.         graph = graph
  9.         self.root = Tk()
  10.         self.root.title("TB 2 - Algoritma Dijsktra")
  11.         self.root.geometry("500x150")
  12.         self.root.resizable(width=False, height=False)
  13.         self.dijkstra(graph,start,goal)
  14.         self.root.mainloop()
  15.  
  16.     def dijkstra(self, graph, start,goal):
  17.         jarak_terpendek = {}
  18.         pendahulu = {}
  19.         unvisitedNodes = graph
  20.         infinity = 9999999
  21.         path = []
  22.         for node in unvisitedNodes:
  23.             jarak_terpendek[node] = infinity
  24.         jarak_terpendek[start] = 0
  25.  
  26.         while unvisitedNodes:
  27.             minNode = None
  28.             for node in unvisitedNodes:
  29.                 if minNode is None:
  30.                     minNode = node
  31.                 elif jarak_terpendek[node] < jarak_terpendek[minNode]:
  32.                     minNode = node
  33.            
  34.             for childNode, weight in graph[minNode].items():
  35.                 if weight + jarak_terpendek[minNode] < jarak_terpendek[childNode]:
  36.                     jarak_terpendek[childNode] = weight + jarak_terpendek[minNode]
  37.                     pendahulu[childNode] = minNode
  38.             unvisitedNodes.pop(minNode)
  39.        
  40.         currentNode = goal
  41.         while currentNode != start:
  42.             try:
  43.                 path.insert(0, currentNode)
  44.                 currentNode = pendahulu[currentNode]
  45.             except IndexError:
  46.                 print("Path not reachable")
  47.                 break
  48.        
  49.         path.insert(0,start)
  50.         if jarak_terpendek[goal] != infinity:
  51.             seb = 0
  52.             newPath = {}
  53.             for x in path:
  54.                 newPath[x] = jarak_terpendek[x] - seb
  55.                 seb = jarak_terpendek[x]
  56.             print("{}Start from : {}{} {}To : {}{}".format(Fore.BLUE, Fore.RED, start.upper(), Fore.BLUE, Fore.YELLOW, goal.upper()))
  57.             print(' -> '.join('{}{} {}({})'.format(Fore.RED, key, Fore.MAGENTA, value) for key, value in newPath.items()))
  58.             print(Fore.WHITE + 'Total Shortest distance is ' + Fore.GREEN + str(jarak_terpendek[goal]))
  59.             frame = LabelFrame(self.root, text=" Izzeldin Addarda - 41519010045 \n Akbar Basyarudin - 41519010046 \n Ridho Aditya N - 41519010050 ", bd=8,fg='white', bg="black")    
  60.             Label(frame, text='Jarak dari {} ke {}'.format(start.upper(), goal.upper()), fg='white', bg='black').place(x=0, y=0)
  61.             self.distance_goal = str(jarak_terpendek[goal])
  62.             Label(frame, text='Jarak Terpendek       :  ' + str(jarak_terpendek[goal]), fg='white', bg='black').place(x=0, y=17)
  63.             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)
  64.             frame.pack(expand=YES, fill=BOTH)
  65.  
  66. graph = {
  67.     's':{'a':3, 'b':4},
  68.     'a':{'c':5, 's':3},
  69.     'b':{'c':2, 's':4},
  70.     'c':{'d':5, 'f':3, 'a':5, 'b':2},
  71.     'd':{'e':3, 'c':5},
  72.     'f':{'e':6, 'c':3},
  73.     'e':{'f':6, 'd':3}
  74. }
  75. print(Fore.GREEN + " --- GRAPH ---")
  76. pprint(graph)
  77. print(Fore.CYAN + "# Result : ")
  78. Dijsktra(graph, 's', 'e')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement