Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ALGORITMA DAN STRUKTUR DATA

ALGORITMA DAN STRUKTUR DATA

Implementasi algoritma djikstra dalam aplikasi untuk menentukan lintasan terpendek jalan darat antar kota serta mencari solusi kemacetan

Lusiana Diyan N

December 11, 2019
Tweet

More Decks by Lusiana Diyan N

Other Decks in Programming

Transcript

  1. Implementasi algoritma djikstra dalam aplikasi untuk menentukan lintasan terpendek jalan

    darat antar kota serta mencari solusi kemacetan ALGORITMA DAN STRUKTUR DATA
  2. Latar belakang masalah Untuk menuju ke suatu tempat atau kota

    tujuan dapat ditempuh melalui beberapa lintasan, selain itu dengan mempertimbangkan tingkat kemacetan dari setiap jalur lintasan maupun pertimbangan lainnya dalam menentukan pilihan jalur yang akan dilalui. Dalam menentukan lintasan terpendek dan meminimalisir tingkat kemacetan dapat diperoleh dengan beberapa algoritma matematika yang mana dalam hal ini kami memilih algoritma djikstra dalam sistem ini. Algoritma ini bertujuan untuk menemukan lintasan terpendek berdasarkan bobot terkecil dari satu titik ke titik lainnya berdasarkan bobot terkecil.
  3. MASALAH YANG DIANGKAT Bagaimana menentukan rute efektif antar kota karena

    terdapat jalan yang bercabang dan adanya kemacetan
  4. KODE PROGRAM Fungsi menambahkan node dari titik asal ke titik

    tujuan def add_edge(self, from_node, to_node, weight): self.edges[from_node].append(to_node) self.edges[to_node].append(from_node) self.weights[(from_node, to_node)] = weight self.weights[(to_node, from_node)] = weight
  5. Inisialisasi weight tiap edge pada Graph edges = [ ('H',

    'G', 449), ('G', 'H', 449), ('F', 'C', 669), ('C', 'F', 669), ('C', 'D', 480), ('D', 'C', 480),- ('E', 'D', 733), ('D', 'E', 733), ('D', 'D', 94), ('Z', 'A', 909), ('A', 'Z', 909), ('Z', 'D', 1215), ('D', 'Z', 1215), ('E', 'G', 482), ('G', 'E', 482), ('H', 'G', 453), ('G', 'H', 453), ('B', 'Z', 1390), ('Z', 'B', 1390), ('E', 'E', 381), ('C', 'A', 1517), ('A', 'C', 1390), ]
  6. Struktur data set yang digunakan untuk menyimpan node yang telah

    dikunjungi def dijsktra(graph, initial, end): shortest_paths = {initial: (None, 0)} current_node = initial visited = set()
  7. Memasukkan current node ke dalam visited while current_node != end:

    visited.add(current_node) destinations = graph.edges[current_node] #memasukkan node pada graph weight_to_current_node = shortest_paths[current_node][1]
  8. for next_node in destinations: #menambahkan weight dari current node weight

    = graph.weights[(current_node, next_node)] + weight_to_current_node #menambahkan current node ke shortest paths if next_node not in shortest_paths: shortest_paths[next_node] = (current_node, weight) else: #membandingkan weight terpendek current_shortest_weight = shortest_paths[next_node][1] if current_shortest_weight > weight: shortest_paths[next_node] = (current_node, weight)
  9. next_destinations = {node: shortest_paths[node] for node in shortest_paths if node

    not in visited} if not next_destinations: return "Route Not Possible" # next node is the destination with the lowest weight current_node = min(next_destinations, key=lambda k: next_destinations[k][1])
  10. Work back through destinations in shortest path path = []

    while current_node is not None: path.append(current_node) distance.append(weight) next_node = shortest_paths[current_node][0] current_node = next_node # Reverse path path = path[::-1] return path
  11. Menampilkan hasil pemrosesan sistem print("Shortest Path : ") print(dijsktra(graph, 'A',

    'Z')) for x in distance: temp = 0 temp = temp + x #mengakumulasikan jarak yang dilalui harga = temp * 10 #mengakumulasikan total biaya print("Distance : ") print(temp, "meter") print("Harga : ") print("Rp ", harga) break