Wie schreibe ich den Bellman-Ford-Algorithmus in Python?

WBOY
Freigeben: 2023-09-22 08:01:41
Original
1163 Leute haben es durchsucht

Wie schreibe ich den Bellman-Ford-Algorithmus in Python?

Wie schreibe ich den Bellman-Ford-Algorithmus in Python?

Der Bellman-Ford-Algorithmus ist ein Algorithmus zur Lösung des Single-Source-Shortest-Path-Problems mit negativen Gewichtungskanten. In diesem Artikel wird erläutert, wie Sie mit Python den Bellman-Ford-Algorithmus schreiben, und es werden spezifische Codebeispiele bereitgestellt.

Die Kernidee des Bellman-Ford-Algorithmus besteht darin, den Pfad durch schrittweise Iteration zu optimieren, bis der kürzeste Pfad gefunden wird. Die Schritte des Algorithmus sind wie folgt:

  1. Erstellen Sie ein Array dist[], um den kürzesten Abstand vom Quellpunkt zu anderen Eckpunkten zu speichern.
  2. Initialisieren Sie alle Elemente des dist[]-Arrays auf unendlich, jedoch mit einem Abstand von 0 vom Quellpunkt.
  3. Durch n-1 Iterationen gilt für jede Kante (u, v):
    1) Wenn dist[v] > Gewicht(u, v).
  4. Überprüfen Sie, ob ein negativer Gewichtszyklus vorliegt. Für jede Kante (u, v):
    1) Wenn dist[v] >
  5. Wenn es keinen negativen Gewichtszyklus gibt, wurde der kürzeste Pfad berechnet und das Array dist[] ist der kürzeste Pfad.

Hier ist ein Codebeispiel des in Python geschriebenen Bellman-Ford-Algorithmus:

class Graph:
    def __init__(self, vertices):
        self.V = vertices
        self.graph = []

    def add_edge(self, u, v, w):
        self.graph.append([u, v, w])

    def bellman_ford(self, src):
        dist = [float("Inf")] * self.V
        dist[src] = 0

        for _ in range(self.V - 1):
            for u, v, w in self.graph:
                if dist[u] != float("Inf") and dist[u] + w < dist[v]:
                    dist[v] = dist[u] + w

        for u, v, w in self.graph:
            if dist[u] != float("Inf") and dist[u] + w < dist[v]:
                print("图中存在负权环,无法确定最短路径")
                return

        self.print_solution(dist)

    def print_solution(self, dist):
        print("顶点    最短距离")
        for i in range(self.V):
            print(i, "        ", dist[i])

# 示例用法
g = Graph(5)
g.add_edge(0, 1, -1)
g.add_edge(0, 2, 4)
g.add_edge(1, 2, 3)
g.add_edge(1, 3, 2)
g.add_edge(1, 4, 2)
g.add_edge(3, 2, 5)
g.add_edge(3, 1, 1)
g.add_edge(4, 3, -3)
g.bellman_ford(0)
Nach dem Login kopieren

Im obigen Beispiel wird ein Graph g erstellt und einige Kanten hinzugefügt. Rufen Sie dann die Methode bellman_ford auf, um den kürzesten Pfad zu berechnen und das Ergebnis auszugeben. In diesem Beispiel ist der Quellpunkt 0 und der kürzeste Weg wird berechnet.

Die zeitliche Komplexität des Bellman-Ford-Algorithmus beträgt O(V*E), wobei V die Anzahl der Eckpunkte und E die Anzahl der Kanten ist. Wenn in praktischen Anwendungen ein negativer Gewichtszyklus im Diagramm vorhanden ist, stoppt der Algorithmus nicht, sondern tritt in eine Endlosschleife ein. Daher sollte bei der Verwendung des Bellman-Ford-Algorithmus zunächst geprüft werden, ob ein negativer Gewichtszyklus vorliegt.

Das obige ist der detaillierte Inhalt vonWie schreibe ich den Bellman-Ford-Algorithmus in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!