[GO] [Python3] Dikstra-Methode mit 14 Zeilen

Gestern habe ich [Primfaktorisierung in 14 Zeilen] implementiert (https://qiita.com/nontan18/items/167ab2f44340372174b7), aber heute habe ich die Dyxtra-Methode in 14 Zeilen mithilfe des Heaps implementiert. In 14 Zeilen von oben.

dijkstra.py


from heapq import heappush, heappop

def dijkstra(vertices_num, edges, src):
  dist = [float('inf')] * vertices_num
  heap = [(0, src)]

  while len(heap):
    d, from_ = heappop(heap)
    if d < dist[from_]:
      dist[from_] = d
      for _, to, cost in filter(lambda e: e[0]==from_, edges):
        heappush(heap, (min(dist[to], dist[from_] + cost), to))
        
  return dist

if __name__ == '__main__':
  answer = dijkstra(
    8, 
   [
      (0, 1, 5), (0, 2, 4), (0, 3, 1), (1, 4, 2), (1, 0, 5), (2, 0, 4), (2, 3, 2), (2, 4, 5), 
      (2, 5, 6), (3, 0, 1), (3, 2, 2), (4, 1, 2), (4, 2, 5), (4, 6, 1), (4, 7, 3), (5, 2, 6), 
      (5, 7, 2), (6, 4, 1), (6, 7, 4), (7, 4, 3), (7, 5, 2), (7, 6, 4)
    ], 0
  )
  print(answer) # [0, 5, 3, 1, 7, 9, 8, 10]

Das erste Argument ist die Anzahl der Eckpunkte, das zweite Argument ist eine Liste von (von_ bis, Kosten) und das dritte Argument ist der Index des Startpunkts. Der Rückgabewert gibt den kürzesten Abstand vom Startpunkt zu jedem Scheitelpunkt zurück.

Referenz

https://www.youtube.com/watch?v=X1AsMlJdiok In Bezug auf die Dyxtra-Methode war die Erklärung in diesem Video sehr leicht zu verstehen, daher habe ich einen Testfall mit Bezug auf die dort behandelten Probleme erstellt. Rote Buchstaben sind die Indizes jedes Scheitelpunkts. image.png (Quelle: Von der Youtube-Seite oben)

Recommended Posts

[Python3] Dikstra-Methode mit 14 Zeilen
Implementierung der Dyxtra-Methode durch Python
Algorithmus in Python (Dijkstra)
Finden Sie den kürzesten Weg mit dem Python Dijkstra-Algorithmus
Implementieren Sie den Dijkstra-Algorithmus in Python
Python-Algorithmus
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Python-Memorandum (Algorithmus)
Scraping mit Python
Ali Buch in Python: Sec.2-5 Dyxtra-Methode
Python mit Go
Twilio mit Python
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
Spielen Sie mit 2016-Python
Getestet mit Python
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Lösen Sie das Python-Rucksackproblem mit dem Greedy-Algorithmus
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Ein * Algorithmus (Python Edition)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python