So verwenden Sie den Floyd-Warshall-Algorithmus in C++

WBOY
Freigeben: 2023-09-19 16:54:11
Original
823 Leute haben es durchsucht

So verwenden Sie den Floyd-Warshall-Algorithmus in C++

So verwenden Sie den Floyd-Warshall-Algorithmus in C++

Der Floyd-Warshall-Algorithmus ist ein Algorithmus, der verwendet wird, um den kürzesten Pfad zwischen allen Knotenpaaren in einem gerichteten gewichteten Graphen zu finden. Es übernimmt die Idee der dynamischen Programmierung und erhält schließlich den kürzesten Weg (d. h. das minimale Gewicht), indem es die Abstandsinformationen zwischen Knotenpaaren kontinuierlich aktualisiert.

In C++ können Sie die Adjazenzmatrix (Adjazenzmatrix) verwenden, um die Struktur des Diagramms darzustellen und den kürzesten Weg durch den Floyd-Warshall-Algorithmus zu lösen.

Die Adjazenzmatrix ist ein zweidimensionales Array, das das Gewicht (den Abstand) zwischen den einzelnen Knoten aufzeichnet. Wenn zwischen zwei Knoten keine direkte Verbindung besteht, verwenden Sie zur Darstellung eine größere Zahl (z. B. Unendlich).

Das Folgende ist ein Beispielcode, der zeigt, wie der Floyd-Warshall-Algorithmus in C++ verwendet wird:

#include  using namespace std; const int INF = 1e9; // 无穷大 void floydWarshall(int graph[][4], int n) { int dist[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { dist[i][j] = graph[i][j]; } } for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; } } } } // 输出最短路径矩阵 cout << "最短路径矩阵:" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dist[i][j] == INF) { cout << "INF" << " "; } else { cout << dist[i][j] << " "; } } cout << endl; } } int main() { int graph[4][4] = { {0, 5, INF, 10}, {INF, 0, 3, INF}, {INF, INF, 0, 1}, {INF, INF, INF, 0} }; floydWarshall(graph, 4); return 0; }
Nach dem Login kopieren

Im obigen Code definieren wir ein 4x4-Adjazenzmatrixdiagramm und verwenden INF, um nicht vorhandene Kanten darzustellen. Rufen Sie dann die Funktion floydWarshall auf und übergeben Sie den Graphen und die Anzahl der Knoten. In der Funktion verwenden wir das zweidimensionale Array dist, um die kürzesten Pfadinformationen zwischen dem aktuellen Knotenpaar zu speichern.

In der Hauptschleife des Floyd-Warshall-Algorithmus aktualisieren wir kontinuierlich das dist-Array, bis wir die endgültige Matrix des kürzesten Pfads erhalten. Schließlich geben wir die Matrix des kürzesten Pfads aus und ersetzen INF zur einfacheren Lesbarkeit durch Unendlich.

Bitte beachten Sie, dass der Algorithmus bei großen Diagrammen möglicherweise langsamer läuft, da die zeitliche Komplexität des Floyd-Warshall-Algorithmus O(n^3) beträgt, wobei n die Anzahl der Knoten ist.

Ich hoffe, dieser Artikel kann Ihnen helfen, den Floyd-Warshall-Algorithmus in C++ zu verstehen und zu verwenden.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Floyd-Warshall-Algorithmus in C++. 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
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!