Wir verfügen über einen ungerichteten Graphen, Quellknoten, Zielknoten und das Gewicht einer zusätzlichen Kante, die Sie verwenden können, um zwei Knoten zu verbinden, die nicht früher verbunden waren. Sie müssen das Mindestgewicht des Pfades zwischen der Quelle und dem Ziel finden. Sie können die bereitgestellte Kante nur einmal verwenden. Hier ist ein Beispiel: ein Graph mit 5 Kanten wie folgt 1-> 2 das Gewicht ist 1,2-> 3 das Gewicht ist 2,3-> 4 das Gewicht ist 3,4-> 5 das Gewicht ist 1, 1-> 4 das Gewicht ist 3 und Quellknoten ist Knoten 1, Ziel ist Knoten 4. Wir müssen sagen, dass die minimale Pfadlänge. (das ist 2 in diesem Fall) Wir können hinzufügen, eine zusätzliche Kante von Gewicht 1 (hier von 1 bis 5) Ich würde gerne wissen, wie dies in Java implementiert werden kann.Kürzester Pfad eines ungerichteten Graphen mit einer zusätzlichen Gewichtskante
Antwort
Wenn ich die Frage richtig verstehe, dann alles, was Sie suchen, ist eine Implementierung von Breite erste Suche in Java, die here gefunden werden könnte. und ich sehe keine Verwendung für das zusätzliche Kantengewicht (da dies nur die Entfernung erhöhen würde), es sei denn, du verwendest die zusätzliche Kante, um einen direkten Weg zwischen 1 und 4 zu erzeugen (dh die Quelle und das Ziel), also die kürzeste Entfernung 1. Aber wiederum müssten Sie in jedem Fall prüfen, ob diese Extrakante weniger Gewicht hat als die Breite aus der ersten Suche. Ohne Verwendung der zusätzlichen Kante ist die kürzeste Entfernung in diesem Fall 3, nicht 2.
Nehmen wir an, Sie haben keine Null- und Negativkanten. Sie behalten Kanten in der Anordnung a [N] [N] bei. Ändern eines Graphen Bit:
make gerichteten Graphen A aus Quelle Graph:
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (a[i][j] > 0 && a[j][i] == 0) a[j][i] = a[i][j];
eine Kopie Graphen machen und wilden Randkante (Wild hinzufügen, gerichtet ist, führt von Teil A Teil B wird vordefiniert Gewicht)
Array b definieren: int b [2 * N] [2 * N], initialisieren Kanten mit Nullen
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (a[i][j] == 0) { b[i][N+j] = wildWeight; } else { b[i][j] = a[i][j]; b[N+i][N+j] = a[i][j]; }
Google für Dijkstra-Algorithmus-Implementierung in Java und verwenden Sie es auf dieser Midified-Grafik.
- 1. Einfacher kürzester Pfad eines azyklischen ungerichteten getrennten Graphen
- 2. Kürzester Pfad in einem gewichteten Graphen mit farbigen Kanten
- 3. Allgemeiner Algorithmus zum Triangulieren eines ungerichteten Graphen?
- 4. JGrapT ungerichteten Graphen Einstellung
- 5. Artikulationspunkt des ungerichteten Graphen
- 6. Erkennen eines Zyklus in einem ungerichteten Graphen mit DFS
- 7. Kürzester Pfad in JavaScript
- 8. Anzahl der Zyklen in einem ungerichteten Graphen
- 9. Kürzester Pfad-Algorithmus mit Wörterbüchern [Python]
- 10. Kürzester Pfad (Ziel = Ursprung)
- 11. Machen Sie ungerichteten Graphen aus der Adjazenzliste
- 12. Floyds Kürzester Pfad Algorithmus C++
- 13. Anzahl der Kanten in einem ungerichteten Graphen
- 14. Boost: Erstellen Graph aus kürzester Pfad
- 15. Längster Kürzester Pfad (nicht ganz)
- 16. Kürzester Pfad auf Graph mit wechselnden Gewichten
- 17. Kürzester Pfad nach Verdoppelung der Kantengewichte
- 18. Kürzester Pfad zum Umwandeln eines Wortes in ein anderes
- 19. Effiziente Möglichkeit, den Pfad zwischen zwei beliebigen Knoten in einem ungerichteten Graphen zu finden
- 20. Hinzufügen eines zusätzlichen Punktes in einem ggplot2-Graphen
- 21. effizienter Algorithmus all 1-Cuts in einem ungerichteten Graphen
- 22. htaccess - fügen Sie zusätzlichen Pfad
- 23. K Kürzester Pfad Python funktioniert nicht
- 24. Kürzester Pfad zwischen zwei Punkten im Koordinatensystem
- 25. Fast Connected Component Identifikation in ungerichteten Graphen in R
- 26. Algorithmen zum Identifizieren aller Zyklusbasen in einem ungerichteten Graphen
- 27. Finden aller nicht überlappenden Zyklen in einem ungerichteten Graphen
- 28. Ein Kürzester-Pfad-Algorithmus mit der Mindestanzahl von überfahrenen Knoten
- 29. Performante Weg Adjazenzliste auf Links für ungerichteten Graphen zu konvertieren
- 30. Directed to ungerichteten Graph
Ich möchte nur die Lösung kennen und Nein werde ich nicht bestellen :) –