Inhaltsverzeichnis
Grammatik
Parameter
Algorithmus
Beispiel
输出
结论
Heim Backend-Entwicklung C++ Finden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten

Finden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten

Sep 20, 2023 pm 02:21 PM
节点 最短路径 Freud-Warshal-Algorithmus

C++ verfügt über ein Makro, das als Codeabschnitt oder erwarteter Wert definiert ist und immer dann wiederverwendet wird, wenn der Benutzer es benötigt. Der Floyd-Walshall-Algorithmus ist der Prozess, den kürzesten Weg zwischen allen Scheitelpunktpaaren in einem gegebenen gewichteten Graphen zu finden. Der Algorithmus folgt einem dynamischen Programmieransatz, um den Minimalgewichtsgraphen zu finden.

Lassen Sie uns die Bedeutung des Freud-Walshire-Algorithmus anhand von Diagrammen verstehen -

Finden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten

Mit Scheitelpunkt 1 als Quelle und Scheitelpunkt 4 als Ziel finden Sie den kürzesten Weg zwischen ihnen.

Wir haben gesehen, dass es zwei Pfade gibt, die mit dem Zielscheitelpunkt 4 verbunden werden können.

  • 1 -> 4 – Die Kante hat ein Gewicht von 5

  • 1 -> 8 -> 4 – Das Kantengewicht (1+2+1) beträgt 4.

In der gegebenen Grafik I sehen wir die minimale Kante, die zwei Eckpunkte verbindet. Hier also der Pfad vom Scheitelpunkt 8 zum Scheitelpunkt 3, der Scheitelpunkt 1 mit Scheitelpunkt 4 verbindet und die Kante ist 4. Andererseits gibt es eine gerichtete Kante vom Scheitelpunkt 1 zum Scheitelpunkt 4, und das Gewicht der Kante beträgt 5.

Jetzt vergleichen wir zwei Gewichte, nämlich 4 und 5. Daher ist hier 4 das Mindestgewicht des Diagramms, berechnet nach dem Floyd Warshall-Algorithmus.

In diesem Artikel verwenden wir den Floyd Warshall-Algorithmus, um den kürzesten Weg zwischen zwei beliebigen Knoten zu finden.

Grammatik

Die folgende Syntax wird im Programm verwendet -

data_type[][] array_name;
Nach dem Login kopieren

Parameter

data_type[][] – Der vom Benutzer erwähnte Datentyp. Das erste Array repräsentiert Zeilen und das zweite Array repräsentiert Spalten. Dies stellt also ein zweidimensionales Array dar.

array_name – Der dem Array gegebene Name.

Algorithmus

  • Wir starten das Programm mit der Header-Datei 'iostream' und definieren den Makrospeicherort als 'INF' (unendlich), da es später die 2D-Array-Matrix und die if-else-Anweisung erfüllt.

  • Als nächstes erstellen wir eine globale Funktionsdefinition namens 'printPath' und akzeptieren drei Parameter, 'parent[]', 'i' und 'j', um zu überprüfen, ob der Pfad existiert.

  • Dann starten wir die Hauptfunktion und speichern den Wert ‘4’ in der Variablen ‘V’, die die Anzahl der Eckpunkte darstellt. Zweitens speichern Sie den Wert in Form einer Adjazenzmatrix in der Variablen ‘dist[V][V]‘. Wie wir wissen, stellt dist[i][j] eine 2D-Matrix dar, die das Gewicht der Kante von ‘i‘ bis ‘j‘ definiert, indem die Adjazenzmatrix gespeichert wird.

  • Als nächstes initialisieren wir ein 2D-Array für die Variable ‘parent’ mit der Größe [V][V].

  • In dieser Variablen verwenden wir, um jedes Scheitelpunktpaar 'i' und 'j' in Bezug auf 'parent[i][j]'< /b>.

    anzuzeigen
  • Durch die Verwendung zweier verschachtelter for-Schleifen finden wir den kürzesten Weg. Die erste for-Schleife durchläuft die Zeilen in der Matrix. Dann durchlaufen wir die Spalten in der Matrix durch die zweite for-Schleife und dann überprüfen wir die folgende Bedingung mit der if-else-Anweisung -

    • If (dist[i][j] != INF && i != j) { Die chinesische Übersetzung von parent[i][j] = i;}

      lautet: parent[i][j] = i;}

      In der if-Anweisung verwenden wir den 'and' (&&)-Operator, um zwei Bedingungen auszudrücken. Wenn beide Bedingungen erfüllt sind, wird 'i' in 'parent[i][j]' gespeichert, wodurch dies überprüft wird Der Pfad existiert.

    • Andere{ Die chinesische Übersetzung von parent[i][j] = -1;}

      lautet: parent[i][j] = -1;}

      In der else-Anweisung initialisieren wir „-1“ mit „parent[i][j]“, um zu überprüfen, dass der Pfad nicht existiert.

  • Jetzt beginnen wir mit drei verschachtelten for-Schleifen und wenden k Eckpunkte im Bereich von 0 bis V-1 an. Mit Hilfe dieses Bereichs werden unsere kürzeste Distanz und unser kürzester Pfad aktualisiert. In der dritten verschachtelten Schleife verwenden wir die folgende Bedingung wie

if (dist[i][j] < dist[i][k] + dist[k][j]){
   dist[i][j] = dist[i][k] + dist[k][j]; 
   parent[i][j] = parent[k][j];	
}
Nach dem Login kopieren

    Hier aktualisiert K die Zeilen- und Spaltenteile der 2D-Array-Matrix, wodurch der neu aktualisierte kürzeste Pfad und die kürzeste Entfernung überprüft werden.

  • Als nächstes drucken wir die kürzeste Distanz und den kürzesten Weg aller Scheitelpunktpaare aus, indem wir die folgenden Bedingungen angeben

    • Durch die Verwendung von zwei verschachtelten for-Schleifen drucken wir die kürzeste Entfernung und den kürzesten Pfad.

    • Durch die Verwendung der if-Anweisung unter der zweiten for-Schleife prüfen wir, ob dist[i][j] gleich unendlich ist. Wenn sich herausstellt, dass es unendlich ist, geben Sie „INF“ aus, andernfalls geben Sie den kürzesten Pfad aus.

  • Schließlich rufen wir die Funktion 'printPath()' auf, indem wir drei Parameter (parent[i], i und j) übergeben.

Beispiel

In diesem Programm verwenden wir den Floyd Warshall-Algorithmus, um den kürzesten Weg zwischen zwei beliebigen Knoten zu berechnen.

#include <iostream> 
using namespace std; 
#define INF 1000000000 // Infinity

void printPath(int parent[], int i, int j) {
   if (i == j) 
      cout << i << " "; 
   else if (parent[j] == -1) 
     cout << "No path exists"; 
   else
   { 
      printPath(parent, i, parent[j]); 
      cout << j << " "; 
   }
} 

int main() 
{
   int V = 4; 
   // V represent number of vertices
   int dist[V][V] = {{0, 2, INF, 4}, 
      {6, 0, 5, 3}, 
      {INF, 10, 0, 1}, 
      {7, 9, 8, 0}}; 
   // Represent the graph using adjacency matrix

   // Apply the Floyd Warshall algorithm to find the shortest paths
   int parent[V][V];
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      {
         if (dist[i][j] != INF && i != j)
         parent[i][j] = i;
         else
         parent[i][j] = -1;
      }
   }
   // update the path and distance using the k vertex range from 0 to V-1.
   for (int k = 0; k < V; k++) 
   { 
      for (int i = 0; i < V; i++) 
      { 
         for (int j = 0; j < V; j++) 
         { 
            if (dist[i][j] > dist[i][k] + dist[k][j]) 
            {
               dist[i][j] = dist[i][k] + dist[k][j];
               parent[i][j] = parent[k][j];	
            }
         }
      }
   }

   // Print shortest distances and paths between all pairs of vertices
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      { 
         cout << "The Shortest distance between " << i << " and " << j << " is ";
         if (dist[i][j] == INF) 
            cout << "INF "; 
         else
            cout << dist[i][j] << " ";

         cout << "and the shortest path is:- ";
         printPath(parent[i], i, j);
         cout << endl;
      } 
   } 

   return 0; 
}
Nach dem Login kopieren

输出

The Shortest distance between 0 and 0 is 0 and the shortest path is:- 0 
The Shortest distance between 0 and 1 is 2 and the shortest path is:- 0 1 
The Shortest distance between 0 and 2 is 7 and the shortest path is:- 0 1 2 
The Shortest distance between 0 and 3 is 4 and the shortest path is:- 0 3 
The Shortest distance between 1 and 0 is 6 and the shortest path is:- 1 0 
The Shortest distance between 1 and 1 is 0 and the shortest path is:- 1 
The Shortest distance between 1 and 2 is 5 and the shortest path is:- 1 2 
The Shortest distance between 1 and 3 is 3 and the shortest path is:- 1 3 
The Shortest distance between 2 and 0 is 8 and the shortest path is:- 2 3 0 
The Shortest distance between 2 and 1 is 10 and the shortest path is:- 2 1 
The Shortest distance between 2 and 2 is 0 and the shortest path is:- 2 
The Shortest distance between 2 and 3 is 1 and the shortest path is:- 2 3 
The Shortest distance between 3 and 0 is 7 and the shortest path is:- 3 0 
The Shortest distance between 3 and 1 is 9 and the shortest path is:- 3 1 
The Shortest distance between 3 and 2 is 8 and the shortest path is:- 3 2 
The Shortest distance between 3 and 3 is 0 and the shortest path is:- 3 
Nach dem Login kopieren

结论

我们学习了使用Floyd Warshall算法找到任意两个节点之间的最短路径的概念。我们使用邻接矩阵作为程序的输入,通过它我们找到了最短路径和距离。此外,为了更新路径和距离,我们使用了k个顶点来更新行和列。在我们的日常生活中,我们在谷歌地图上搜索最短路线或路径,从一个起点到目的地。

Das obige ist der detaillierte Inhalt vonFinden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Summe aller Paare kürzester Pfade im Baum Die Summe aller Paare kürzester Pfade im Baum Aug 28, 2023 pm 03:17 PM

In Bäumen bezieht sich der Begriff „Summe der kürzesten Wege aller Knotenpaare“ auf die Berechnung der Summe der einzelnen kürzesten Wege aller Knotenpaare. Eine effektive Methode ist die Verwendung des dualen DFS-Algorithmus (Tiefensuche). Der Abstand zwischen dem ausgewählten Knoten und jedem anderen Knoten wird während des ersten DFS-Durchlaufs bestimmt. Der Baum wird während des zweiten DFS-Durchlaufs erneut durchlaufen, wobei jeder Knoten als potenzieller LCA (niedrigster gemeinsamer Vorfahre) betrachtet und die Summe der Abstände zwischen Paaren von Nachkommenknoten des ausgewählten LCA berechnet wird. Mit dieser Methode können Sie die Summe der kürzesten Pfade für alle Knotenpaare im Baum berechnen und eine ideale Lösung sicherstellen. Verwendete Methoden Duale DFS-Methode (Depth First Search) Dynamische Programmiermethode Duale DFS-Methode (Depth First Search) für den Baum Alle Paare kürzester Wege

Fragen Sie das Mindestgewicht im Teilbaum ab Knoten X und höchstens Abstand D ab Fragen Sie das Mindestgewicht im Teilbaum ab Knoten X und höchstens Abstand D ab Aug 25, 2023 am 11:25 AM

Bei der Computerprogrammierung ist es manchmal erforderlich, das Mindestgewicht eines Teilbaums zu ermitteln, der von einem bestimmten Knoten stammt, vorausgesetzt, der Teilbaum darf keine Knoten enthalten, die mehr als D Einheiten vom angegebenen Knoten entfernt sind. Dieses Problem tritt in verschiedenen Bereichen und Anwendungen auf, darunter in der Graphentheorie, baumbasierten Algorithmen und der Netzwerkoptimierung. Ein Teilbaum ist eine Teilmenge einer größeren Baumstruktur, wobei der angegebene Knoten als Wurzelknoten des Teilbaums dient. Ein Teilbaum enthält alle Nachkommen des Wurzelknotens und deren Verbindungskanten. Die Gewichtung eines Knotens bezieht sich auf einen bestimmten, diesem Knoten zugewiesenen Wert, der seine Wichtigkeit, Wichtigkeit oder andere relevante Metriken darstellen kann. Bei diesem Problem besteht das Ziel darin, das Mindestgewicht aller Knoten in einem Teilbaum zu ermitteln und gleichzeitig den Teilbaum auf Knoten zu beschränken, die höchstens D Einheiten vom Wurzelknoten entfernt sind. Im folgenden Artikel werden wir uns mit der Komplexität des Minings von Mindestgewichten aus Teilbäumen befassen

So implementieren Sie den Kürzeste-Pfad-Algorithmus mit Java So implementieren Sie den Kürzeste-Pfad-Algorithmus mit Java Sep 19, 2023 am 08:18 AM

Überblick über die Verwendung von Java zur Implementierung des Kürzeste-Pfad-Algorithmus: Der Kürzeste-Pfad-Algorithmus ist eine wichtige Anwendung in der Graphentheorie und wird häufig in der Netzwerkrouting-, Kartennavigation- und anderen Bereichen verwendet. In diesem Artikel erfahren Sie, wie Sie den Kürzeste-Pfad-Algorithmus mit Java implementieren und stellen konkrete Codebeispiele bereit. Algorithmusidee: Es gibt viele Möglichkeiten, den Kürzeste-Pfad-Algorithmus zu implementieren. Die beiden bekanntesten Algorithmen sind der Dijkstra-Algorithmus und der A*-Algorithmus. Hier konzentrieren wir uns auf die Implementierung des Dijkstra-Algorithmus. Die Grundlage des Dijkstra-Algorithmus

Wie implementiert man die Funktionen zum Kopieren und Ausschneiden von Knoten von Mind Maps über Vue und jsmind? Wie implementiert man die Funktionen zum Kopieren und Ausschneiden von Knoten von Mind Maps über Vue und jsmind? Aug 15, 2023 pm 05:57 PM

Wie implementiert man die Funktionen zum Kopieren und Ausschneiden von Knoten von Mind Maps über Vue und jsmind? Mindmap ist ein gängiges Denkwerkzeug, das uns helfen kann, unsere Gedanken zu ordnen und unsere Denklogik zu ordnen. Die Funktionen zum Kopieren und Ausschneiden von Knoten sind häufig verwendete Vorgänge in Mind Maps, mit denen wir vorhandene Knoten bequemer wiederverwenden und die Effizienz der Denkorganisation verbessern können. In diesem Artikel werden wir die beiden Tools Vue und jsmind verwenden, um die Funktionen zum Kopieren und Ausschneiden von Knoten der Mind Map zu implementieren. Zuerst müssen wir Vue und jsmind installieren und erstellen

Was ist die Methode zum Löschen eines Knotens in js? Was ist die Methode zum Löschen eines Knotens in js? Sep 01, 2023 pm 05:00 PM

Die Methoden zum Löschen von Knoten in js sind: 1. Die Methode „removeChild()“ wird verwendet, um den angegebenen untergeordneten Knoten vom übergeordneten Knoten zu entfernen. Der erste Parameter ist der zu löschende untergeordnete Knoten der übergeordnete Knoten. 2. Die Methode parentNode.removeChild() kann direkt über den übergeordneten Knoten aufgerufen werden. 3. Die Methode „remove()“ kann den Knoten direkt löschen Das innerHTML-Attribut wird zum Löschen des Knotens verwendet.

Finden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten Finden Sie mit dem Floyd-Warshal-Algorithmus den kürzesten Weg zwischen zwei beliebigen Knoten Sep 20, 2023 pm 02:21 PM

C++ verfügt über ein Makro, das als Codeabschnitt oder erwarteter Wert definiert ist und immer dann wiederverwendet wird, wenn der Benutzer es benötigt. Der Floyd-Walshall-Algorithmus ist der Prozess, den kürzesten Weg zwischen allen Scheitelpunktpaaren in einem gegebenen gewichteten Graphen zu finden. Der Algorithmus folgt einem dynamischen Programmieransatz, um den Minimalgewichtsgraphen zu finden. Lassen Sie uns die Bedeutung des Floyd-Walshall-Algorithmus anhand eines Diagramms verstehen: Nehmen Sie Scheitelpunkt 1 als Quelle und Scheitelpunkt 4 als Ziel und finden Sie den kürzesten Weg zwischen ihnen. Wir haben gesehen, dass es zwei Pfade gibt, die mit dem Zielscheitelpunkt 4 verbunden werden können. 1->4 – die Kante hat ein Gewicht von 51->8->3->4 – das Kantengewicht (1+2+1) ist 4. Im gegebenen Diagramm I sehen wir die kleinste Kante, die zwei Eckpunkte verbindet. Hier also der Scheitelpunkt

So erstellen, löschen, hängen und ersetzen Sie Elementknoten in js (mit Codebeispielen) So erstellen, löschen, hängen und ersetzen Sie Elementknoten in js (mit Codebeispielen) Aug 06, 2022 pm 05:26 PM

In diesem Artikel wird hauptsächlich das Erstellen, Löschen, Anhängen und Ersetzen von Elementknoten in js vorgestellt. Ich hoffe, dass er Freunden in Not hilfreich sein wird!

Designideen für PHP-Algorithmen: Wie erreicht man eine effiziente Lösung für das Kürzeste-Wege-Problem von Graphen? Designideen für PHP-Algorithmen: Wie erreicht man eine effiziente Lösung für das Kürzeste-Wege-Problem von Graphen? Sep 19, 2023 pm 03:43 PM

Designideen für PHP-Algorithmen: Wie erreicht man eine effiziente Lösung für das Kürzeste-Wege-Problem von Graphen? In der tatsächlichen Entwicklung müssen wir häufig das Problem des kürzesten Weges lösen, beispielsweise in der Kartennavigation, Netzwerkrouting, Logistikverteilung und anderen Bereichen. Der Schlüssel zur Lösung dieser Art von Problemen ist der Kürzeste-Weg-Algorithmus für Graphen. Ein Graph besteht aus einer Menge von Eckpunkten und einer Menge von Kanten. Scheitelpunkte stellen Knoten dar und Kanten stellen Beziehungen zwischen Knoten dar. Das Problem des kürzesten Weges besteht darin, den kürzesten Weg zu finden, der zwei Knoten verbindet. In PHP können wir verschiedene Algorithmen verwenden, um das Problem des kürzesten Pfades zu lösen. Der bekannteste davon ist

See all articles