Inhaltsverzeichnis
Anwendungsmethode
Gieriger Algorithmus
Algorithmus
Beispiel
Ausgabe
Floyd-Warshall-Algorithmus mit Kanteninversionskosten
Fazit
Heim Backend-Entwicklung C++ Überprüft, ob der Pfad zwischen zwei Knoten im angegebenen Diagramm den kürzesten Pfad darstellt

Überprüft, ob der Pfad zwischen zwei Knoten im angegebenen Diagramm den kürzesten Pfad darstellt

Sep 07, 2023 pm 06:57 PM
节点 路径

Überprüft, ob der Pfad zwischen zwei Knoten im angegebenen Diagramm den kürzesten Pfad darstellt

Um zu überprüfen, ob ein gegebener Pfad zwischen zwei Mittelpunkten des Diagramms dem kürzesten Weg entspricht, können Sie das gesamte Kantengewicht entlang des gegebenen Pfades mit dem kürzesten Abstand zwischen derselben Kombination von Mittelpunkten vergleichen, indem Sie zuverlässige Berechnungen für den kürzesten Weg verwenden , wie die Dijkstra-Berechnung oder die Floyd-Warshall-Berechnung. Wenn alle Kantengewichte auf einem bestimmten Pfad mit der am stärksten eingeschränkten Löschung übereinstimmen, stellt dies den einfachsten Pfad dar. Außerdem: Wenn das Gesamtkantengewicht stärker ausgeprägt ist als der kürzeste Abstand, weist dies darauf hin, dass zwischen den beiden Mittelpunkten im Diagramm ein geringer Abstand besteht.

Anwendungsmethode

  • Dijkstra-Algorithmus

  • Floyd-Warshall-Algorithmus mit Kanteninversionskosten

Gieriger Algorithmus

Dijkstras Berechnung ist wahrscheinlich eine beliebte Graph-Traversal-Berechnung, die verwendet wird, um den begrenztesten Pfad zwischen einem Quellzentrum und allen anderen Zentren in einem Diagramm zu finden. Im Falle der Überprüfung, ob ein gegebener Weg zwischen zwei Zentren mit dem endlichsten Weg zusammenhängt, kann die Dijkstra-Berechnung verwendet werden, um den endlichsten Abstand zwischen diesen Zentren zu berechnen. Indem wir Dijkstras Berechnung vom Start-Hub aus ausführen, erhalten wir die endlichsten Intervalle für alle anderen Hubs. Wenn eine bestimmte Route der engsten Entfernung zwischen zwei Knotenpunkten entspricht, handelt es sich um eine wesentliche und kürzeste Route. Sonstiges: Wenn die angegebene Route länger als die berechnete kürzeste Entfernung ist, weist dies darauf hin, dass es in der Karte eine kürzere Route gibt.

Algorithmus

  • Kürzesten Weg erstellen (Grafik, Quelle, Ziel):

  • Initialisieren Sie einen Satz „Vergangenheit“, um den Abstand zum Zentrum zu speichern, und initialisieren Sie ein Wortreferenzintervall, um den engsten Abstand zu speichern.

  • Stellen Sie im Trennzeichenwörterbuch den Abstand des Quell-Hubs auf unendlich und den Abstand aller anderen Hubs auf unendlich ein.

  • Obwohl es unbesuchte Knoten gibt,

  • a. Der Mittelpunkt mit dem geringsten Abstand zur Trennwortreferenz wird ausgewählt und als besucht markiert.

  • b. Für jeden Nachbar-Hub des aktuellen Knotens:

  • Berechnen Sie das temporäre Intervall, indem Sie das Kantengewicht zum Abstand des aktuellen Knotens addieren.

  • Wenn der Zustandsabstand kleiner ist als der Lagerabstand, dann der Inspektionsabstand.

  • Gibt „true“ zurück, wenn die kürzeste Entfernung von der Quelle zum Ziel im Abstand die angegebene Pfadlänge überschreitet (der angegebene Pfad stellt den kürzesten Pfad dar). Andernfalls wird false zurückgegeben.

  • Diese Berechnung verwendet die Dijkstra-Methode, um das kürzeste Intervall zu berechnen und vergleicht dann die kürzeste Entfernung von der Quelle zum Ziel mit einer gegebenen Weglänge, um zu bestimmen, ob es sich um den kürzesten Weg handelt.

Beispiel

#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;

const int INF = numeric_limits<int>::max();

bool shortestPath(vector<vector<pair<int, int>>>& graph, int source, int destination, int pathLength) {
    int numNodes = graph.size();
    vector<int> distances(numNodes, INF);
    distances[source] = 0;

    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    pq.emplace(0, source);

    while (!pq.empty()) {
        int u = pq.top().second;
        int dist = pq.top().first;
        pq.pop();

        if (dist > distances[u])
            continue;

        for (auto& neighbor : graph[u]) {
            int v = neighbor.first;
            int weight = neighbor.second;

            if (dist + weight < distances[v]) {
                distances[v] = dist + weight;
                pq.emplace(distances[v], v);
            }
        }
    }

    return (distances[destination] == pathLength);
}

int main() {
    int numNodes = 6;
    vector<vector<pair<int, int>>> graph(numNodes);

    // Build the graph
    graph[0].emplace_back(1, 2);
    graph[0].emplace_back(2, 5);
    graph[1].emplace_back(3, 4);
    graph[1].emplace_back(4, 1);
    graph[2].emplace_back(3, 2);
    graph[3].emplace_back(4, 3);
    graph[3].emplace_back(5, 6);
    graph[4].emplace_back(5, 2);

    int source = 0;
    int destination = 5;
    int pathLength = 8;

    bool isShortestPath = shortestPath(graph, source, destination, pathLength);

    if (isShortestPath)
        cout << "The given path represents a shortest path." << endl;
    else
        cout << "The given path does not represent a shortest path." << endl;

    return 0;
}

Nach dem Login kopieren

Ausgabe

The given path does not represent a shortest path.
Nach dem Login kopieren

Floyd-Warshall-Algorithmus mit Kanteninversionskosten

Die Floyd-Warshall-Berechnung ist eine dynamisch programmierte Berechnung, die den kürzesten Weg zwischen allen Mittelpunktspaaren in einem Diagramm ermittelt. Um zu überprüfen, ob ein gegebener Weg zwischen zwei Zentren mit dem am stärksten begrenzten Weg zusammenhängt, kann die Floyd-Warshall-Berechnung verwendet werden, um den kürzesten Abstand zwischen allen Sätzen von Zentren im Diagramm zu berechnen. Indem wir die berechnete kürzeste Distanz mit allen Kantengewichten auf einem gegebenen Pfad vergleichen, können wir bestimmen, ob es sich bei einem gegebenen Pfad um den endlichsten Pfad handelt. Wenn die Gesamtkantengewichte mit dem kürzesten Abstand übereinstimmen, ist der angegebene Pfad wahrscheinlich der am stärksten eingeschränkte Pfad zwischen zwei Mittelpunkten im Diagramm.

Algorithmus

  • Erstellen Sie ein 2D-Gitter mit den Maßen „numNodes x numNodes“ und initialisieren Sie es für alle Knotensätze auf unendlich (INF).

  • Setzen Sie die Ecke-zu-Ecke-Addition von dist auf 0.

  • Ändern Sie für jede Koordinationskante (u, v) mit dem Gewicht w im Diagramm dist[u][v] vollständig in w und dist[v][u] in w w_reversal, wobei w_reversal die durch erhaltene Umkehrung ist Kante (v, u).

  • Führen Sie eine Floyd-Warshall-Berechnung nach einer Standardschleife durch:

  • Für jeden Hub auf halber Strecke von numNodes bis 1 gehen Sie wie folgt vor:

  • Verbessern Sie dist[i][j] für jedes Aggregat der Hubs i und j von numNodes auf 1 auf das Minimum von:

  • Entfernung[i][j]

  • Entfernung[i][k]Entfernung[k][j]

  • Nach Abschluss der Berechnung enthält dist den begrenztesten Abstand zwischen allen Hub-Gruppen unter Berücksichtigung der Kanteninversionskosten.

  • Um zu überprüfen, ob eine bestimmte Route zwischen zwei Knotenpunkten (Quelle und Ziel) die kürzeste Route ist, vergleichen Sie die Länge der angegebenen Route mit der Entfernung [Quelle][Ziel]. Wenn ja, ist der angegebene Weg der begrenzteste Weg.

Beispiel

#include <iostream>
#include <vector>
using namespace std;

const int INF = 1e9;

void floydWarshall(vector<vector<int>>& graph, int numNodes) {
    vector<vector<int>> dist(graph); // Distance matrix initialized with the graph

    for (int k = 0; k < numNodes; k++) {
        for (int i = 0; i < numNodes; i++) {
            for (int j = 0; j < numNodes; j++) {
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
            }
        }
    }

    // Printing the shortest distances
    cout << "Shortest distances between all pairs of nodes:" << endl;
    for (int i = 0; i < numNodes; i++) {
        for (int j = 0; j < numNodes; j++) {
            if (dist[i][j] == INF)
                cout << "INF ";
            else
                cout << dist[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int numNodes = 4; // Number of nodes

    // Adjacency matrix representation of the graph with edge weights and edge reversal costs
    vector<vector<int>> graph = {
        {0, 5, INF, 10},
        {INF, 0, 3, INF},
        {INF, INF, 0, 1},
        {INF, INF, INF, 0}
    };

    floydWarshall(graph, numNodes);

    return 0;
}
Nach dem Login kopieren

Ausgabe

Shortest distances between all pairs of nodes:
0 5 8 9 
INF 0 3 4 
INF INF 0 1 
INF INF INF 0 
Nach dem Login kopieren

Fazit

In diesem Artikel wird untersucht, wie man überprüft, ob ein gegebener Pfad zwischen zwei Mittelpunkten eines Diagramms den endlichsten Pfad darstellt. Es veranschaulicht zwei Methoden: die Dijkstra-Berechnung und die Floyd-Warshall-Berechnung zum Erhalten von Kanteninversionen. Die Codeverwendung in C veranschaulicht diese Berechnungen. Außerdem werden Berechnungen und ihre Verwendung kurz erläutert. Dieser Artikel soll den Lesern helfen zu verstehen, wie sie die am stärksten eingeschränkte Methode in einem Diagramm finden und feststellen können, ob eine bestimmte Methode zweifellos die einfachste ist.

Das obige ist der detaillierte Inhalt vonÜberprüft, ob der Pfad zwischen zwei Knoten im angegebenen Diagramm den kürzesten Pfad darstellt. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Wo befinden sich Themes in Windows 11? Wo befinden sich Themes in Windows 11? Aug 01, 2023 am 09:29 AM

Windows 11 bietet so viele Anpassungsoptionen, darunter eine Reihe von Themen und Hintergrundbildern. Obwohl diese Themen auf ihre Art ästhetisch sind, fragen sich einige Benutzer immer noch, wo sie unter Windows 11 im Hintergrund stehen. Diese Anleitung zeigt Ihnen die verschiedenen Möglichkeiten, auf den Speicherort Ihres Windows 11-Designs zuzugreifen. Was ist das Standarddesign von Windows 11? Der Standard-Designhintergrund von Windows 11 ist eine blühende abstrakte königsblaue Blume mit einem himmelblauen Hintergrund. Dieser Hintergrund ist aufgrund der Vorfreude auf die Veröffentlichung des Betriebssystems einer der beliebtesten. Das Betriebssystem bringt jedoch auch eine Reihe anderer Hintergründe mit. Daher können Sie den Hintergrund des Windows 11-Desktopdesigns jederzeit ändern. Themen werden in Windo gespeichert

Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Feb 26, 2024 pm 04:36 PM

Ein Dateipfad ist eine Zeichenfolge, die vom Betriebssystem verwendet wird, um eine Datei oder einen Ordner zu identifizieren und zu finden. In Dateipfaden gibt es zwei gängige Symbole zur Trennung von Pfaden, nämlich den Schrägstrich (/) und den Backslash (). Diese beiden Symbole haben in verschiedenen Betriebssystemen unterschiedliche Verwendungen und Bedeutungen. Der Schrägstrich (/) ist ein häufig verwendetes Pfadtrennzeichen in Unix- und Linux-Systemen. Auf diesen Systemen beginnen Dateipfade im Stammverzeichnis (/) und werden durch Schrägstriche zwischen den einzelnen Verzeichnissen getrennt. Zum Beispiel der Pfad /home/user/Docume

So beheben Sie den Fehler: Die Hauptklasse wurde in Java nicht gefunden oder geladen So beheben Sie den Fehler: Die Hauptklasse wurde in Java nicht gefunden oder geladen Oct 26, 2023 pm 11:17 PM

Dieses Video kann aufgrund eines technischen Fehlers nicht abgespielt werden. (Fehlercode: 102006) Dieser Leitfaden bietet einfache Lösungen für dieses häufige Problem und ermöglicht Ihnen die Fortsetzung Ihrer Codierungsreise. Wir werden auch die Ursachen von Java-Fehlern besprechen und wie man sie in Zukunft verhindern kann. Was ist „Fehler: Hauptklasse nicht gefunden oder geladen“ in Java? Java ist eine leistungsstarke Programmiersprache, die es Entwicklern ermöglicht, eine breite Palette von Anwendungen zu erstellen. Seine Vielseitigkeit und Effizienz bringen jedoch eine Reihe häufiger Fehler mit sich, die während der Entwicklung passieren können. Einer der Interrupts ist „Fehler: Hauptklasse user_jvm_args.txt nicht gefunden oder geladen“, was auftritt, wenn die Java Virtual Machine (JVM) die Hauptklasse zum Ausführen eines Programms nicht finden kann. Dieser Fehler wirkt selbst in einer Hürde

Wie man den Algorithmus von Prim in C++ verwendet Wie man den Algorithmus von Prim in C++ verwendet Sep 20, 2023 pm 12:31 PM

Titel: Verwendung des Prim-Algorithmus und Codebeispiele in C++ Einführung: Der Prim-Algorithmus ist ein häufig verwendeter Minimum-Spanning-Tree-Algorithmus, der hauptsächlich zur Lösung des Minimum-Spanning-Tree-Problems in der Graphentheorie verwendet wird. In C++ kann der Algorithmus von Prim durch sinnvolle Datenstrukturen und Algorithmusimplementierung effektiv genutzt werden. In diesem Artikel wird die Verwendung des Prim-Algorithmus in C++ vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Einführung in den Prim-Algorithmus Der Prim-Algorithmus ist ein gieriger Algorithmus. Er beginnt mit einem Scheitelpunkt und erweitert schrittweise den Scheitelpunktsatz des minimalen Spannbaums, bis er ihn enthält

Was ist der Unterschied im Pfad „Arbeitsplatz' in Win11? Schneller Weg, es zu finden! Was ist der Unterschied im Pfad „Arbeitsplatz' in Win11? Schneller Weg, es zu finden! Mar 29, 2024 pm 12:33 PM

Was ist der Unterschied im Pfad „Arbeitsplatz“ in Win11? Schneller Weg, es zu finden! Da das Windows-System ständig aktualisiert wird, bringt auch das neueste Windows 11-System einige neue Änderungen und Funktionen mit sich. Eines der häufigsten Probleme besteht darin, dass Benutzer den Pfad zu „Arbeitsplatz“ im Win11-System nicht finden können. Dies war in früheren Windows-Systemen normalerweise ein einfacher Vorgang. In diesem Artikel erfahren Sie, wie sich der Pfad „Arbeitsplatz“ im Win11-System unterscheidet und wie Sie ihn schnell finden. Unter Windows1

Rufen Sie den Verzeichnisteil eines Dateipfads mit der Funktion path/filepath.Dir ab Rufen Sie den Verzeichnisteil eines Dateipfads mit der Funktion path/filepath.Dir ab Jul 27, 2023 am 09:06 AM

Verwenden Sie die Funktion path/filepath.Dir, um den Verzeichnisteil des Dateipfads abzurufen. In unserem täglichen Entwicklungsprozess ist häufig die Verarbeitung von Dateipfaden erforderlich. Manchmal müssen wir den Verzeichnisteil des Dateipfads ermitteln, also den Pfad zu dem Ordner, in dem sich die Datei befindet. In der Go-Sprache können Sie die Dir-Funktion verwenden, die vom Paket path/filepath bereitgestellt wird, um diese Funktion zu implementieren. Die Signatur der Dir-Funktion lautet wie folgt: funcDir(pathstring)string Die Dir-Funktion empfängt ein Wort

Analyse des Speicherpfads des Linux-Kernel-Quellcodes Analyse des Speicherpfads des Linux-Kernel-Quellcodes Mar 14, 2024 am 11:45 AM

Der Linux-Kernel ist ein Open-Source-Betriebssystemkernel, dessen Quellcode in einem speziellen Code-Repository gespeichert ist. In diesem Artikel analysieren wir den Speicherpfad des Linux-Kernel-Quellcodes im Detail und verwenden spezifische Codebeispiele, um den Lesern ein besseres Verständnis zu ermöglichen. 1. Speicherpfad für den Linux-Kernel-Quellcode Der Linux-Kernel-Quellcode wird in einem Git-Repository namens Linux gespeichert, das unter [https://github.com/torvalds/linux](http://github.com/torvalds/linux) gehostet wird

Wie finde ich den Speicherpfad von RPM-Dateien im Linux-System? Wie finde ich den Speicherpfad von RPM-Dateien im Linux-System? Mar 14, 2024 pm 04:42 PM

In Linux-Systemen ist RPM (RedHatPackageManager) ein gängiges Softwarepaket-Verwaltungstool, das zum Installieren, Aktualisieren und Löschen von Softwarepaketen verwendet wird. Manchmal müssen wir den Speicherpfad einer installierten RPM-Datei für Such- oder andere Vorgänge finden. Im Folgenden wird erläutert, wie Sie den Speicherpfad der RPM-Datei im Linux-System finden, und es werden spezifische Codebeispiele bereitgestellt. Zuerst können wir den rpm-Befehl verwenden, um das installierte RPM-Paket und seinen Speicherpfad zu finden. Offen

See all articles