[GO] Dyxtra-Methode: Ich habe das Problem von AOJ mit Python anhand des Inhalts von Kencho-sans Artikel in der Oktober-Ausgabe von Software Design gestellt.

Problem gelöst

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_2_A

Quelle

import heapq
INF = 10**10

class Edge:
    to = -1
    w = -1
    def __init__(self, to, w):
        self.to = to
        self.w = w

def Dijkstra(Graph, s):
    dist = [INF] * len(Graph)
    dist[s] = 0

    prev = [-1] * len(Graph)

    #Stellt den Startscheitelpunkt in die Warteschlange
    #[Kürzeste Entfernung zum entsprechenden Peak (aktuelle Zeit),Index des entsprechenden Scheitelpunkts]
    que = [[0,s]]

    #In eine Prioritätswarteschlange konvertieren
    heapq.heapify(que)

    while len(que) > 0:
        #Rufen Sie das erste Element einer priorisierten Warteschlange ab
        #v ist die Scheitelpunktnummer,d ist der aktuell kürzeste Abstand zum entsprechenden Scheitelpunkt
        p = heapq.heappop(que)
        v = p[1]
        d = p[0]

        #Beim Software-Design gibt es die folgende Verarbeitung, aber ist sie nicht erforderlich?
        #Ich verstehe die Notwendigkeit nicht wirklich
        #if d > dist[v]:
        #   continue

        #Berechnen Sie den Abstand für jeden Scheitelpunkt, der vom entsprechenden Scheitelpunkt v erreicht werden kann
        for e in Graph[v]:
            #Wenn die kürzeste Entfernung nicht aktualisiert werden kann, tun Sie nichts
            if dist[v] + e.w >= dist[e.to] :
                continue

            #Das Folgende ist, wenn die kürzeste Entfernung aktualisiert werden kann

            #Verschieben Sie die Zielscheitelpunktinformationen in eine Prioritätswarteschlange
            heapq.heappush(que,[dist[v] + e.w, e.to])

            #Aktualisieren Sie die kürzeste Zielentfernung
            dist[e.to] = dist[v] + e.w

            #Merken Sie sich den Knoten vor dem Ziel
            #Wird nicht für AOJ-Probleme verwendet
            prev[e.to] = v

    for d in dist:
        if d == INF:
            print("INF")
        else:
            print(d)

    return

def main():
    n, m, s = map(int, input().split())
    Graph =  [[] for j in range(n)]
    for i in range(m):
        a, b, w = map(int, input().split())
        Graph[a].append(Edge(b, w))
        #AOJ Problem ist gültige Grafik (http)://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_2_A)
        #Graph[b].append(Edge(a, w))

    Dijkstra(Graph, s)

main()

Recommended Posts

Dyxtra-Methode: Ich habe das Problem von AOJ mit Python anhand des Inhalts von Kencho-sans Artikel in der Oktober-Ausgabe von Software Design gestellt.
[Basic Information Engineer Examination] Ich habe den Algorithmus der euklidischen Methode der gegenseitigen Teilung in Python geschrieben.
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
[Beispiel für eine Python-Verbesserung] In 2 Wochen wurden die Grundlagen von Python auf einer kostenlosen Website erlernt
Ich habe nach dem Problem der Tribonatch-Sequenz in C ++ und der Anzahl der Funktionsaufrufe beim Schreiben mit einer Wiederholungsfunktion gefragt (Python ist ebenfalls verfügbar).
Grundlegende Informationen Schreiben Sie das Problem mit dem Herbst 2018-Algorithmus in Python
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
Algorithmus in Python (Dijkstra)
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Bubble Sort)
Problem bei der Platzierung von Krankenwagen - Aus der Oktoberausgabe des OR-Magazins
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Selective Sort)
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich habe versucht, "einen genetischen Algorithmus (GA) in Python zu implementieren, um das Problem des Handlungsreisenden (TSP) zu lösen".