


So implementieren Sie mit Java den stark verbundenen Komponentenalgorithmus von Diagrammen
So verwenden Sie Java, um den stark verbundenen Komponentenalgorithmus von Graphen zu implementieren
Einführung:
Graph ist eine häufig verwendete Datenstruktur in der Informatik und kann uns bei der Lösung vieler praktischer Probleme helfen. In einem Diagramm bezieht sich eine verbundene Komponente auf eine Reihe von Eckpunkten im Diagramm, die über für beide Seiten erreichbare Pfade verfügen. Eine starke Zusammenhangskomponente bedeutet, dass es einen bidirektionalen Pfad zwischen zwei beliebigen Eckpunkten in einem gerichteten Graphen gibt. In diesem Artikel wird erläutert, wie Sie mithilfe von Java den stark verbundenen Komponentenalgorithmus von Diagrammen implementieren, um den Lesern ein besseres Verständnis der Konnektivität von Diagrammen zu ermöglichen.
1. Darstellung von Diagrammen
In Java können wir Adjazenzmatrizen oder Adjazenzlisten verwenden, um Diagramme darzustellen. Eine Adjazenzmatrix ist ein zweidimensionales Array, in dem die Matrixelemente darstellen, ob zwischen zwei Eckpunkten eine Kante vorhanden ist. Die Adjazenzliste verwendet ein Array, um den Kantensatz zu speichern, der jedem Scheitelpunkt im Diagramm entspricht. In diesem Artikel verwenden wir Adjazenzlisten zur Darstellung von Diagrammen.
2. Prinzip des Algorithmus für stark verbundene Komponenten
Der Algorithmus für stark verbundene Komponenten verwendet die Tiefensuche (DFS), um den Graphen zu durchqueren und eine Reihe von Scheitelpunkten mit stark verbundenen Eigenschaften zu finden. Das Grundprinzip des Algorithmus lautet wie folgt:
- Verwenden Sie zunächst DFS, um jeden Scheitelpunkt im Diagramm zu durchlaufen und die besuchten Scheitelpunkte zu markieren.
- Berechnen Sie dann die Transponierung des Diagramms (dh kehren Sie die Richtung der gerichteten Kanten um), um das transponierte Diagramm zu erhalten.
- Führen Sie als Nächstes eine DFS-Durchquerung des transponierten Diagramms durch und sortieren Sie die Eckpunkte nach der DFS-Endzeit.
- Führen Sie abschließend eine DFS-Durchquerung des Originaldiagramms durch und teilen Sie gegenseitig erreichbare Scheitelpunkte gemäß der sortierten Scheitelpunktreihenfolge in dieselbe verbundene Komponente auf.
3. Java-Code-Implementierung
Das Folgende ist ein Codebeispiel für die Verwendung von Java zur Implementierung des stark verbundenen Komponentenalgorithmus:
import java.util.*; class Graph { private int V; private List<Integer>[] adj; public Graph(int V) { this.V = V; adj = new ArrayList[V]; for (int i = 0; i < V; i++) { adj[i] = new ArrayList<>(); } } public void addEdge(int u, int v) { adj[u].add(v); } public void DFSUtil(int v, boolean[] visited, Stack<Integer> stack) { visited[v] = true; for (int i : adj[v]) { if (!visited[i]) { DFSUtil(i, visited, stack); } } stack.push(v); } public Graph getTranspose() { Graph g = new Graph(V); for (int v = 0; v < V; v++) { for (int i : adj[v]) { g.adj[i].add(v); } } return g; } public void printSCCs() { Stack<Integer> stack = new Stack<>(); boolean[] visited = new boolean[V]; for (int i = 0; i < V; i++) { visited[i] = false; } for (int i = 0; i < V; i++) { if (!visited[i]) { DFSUtil(i, visited, stack); } } Graph gr = getTranspose(); for (int i = 0; i < V; i++) { visited[i] = false; } while (!stack.isEmpty()) { int v = stack.pop(); if (!visited[v]) { gr.DFSUtil(v, visited, new Stack<>()); System.out.println(); } } } } public class Main { public static void main(String[] args) { Graph g = new Graph(5); g.addEdge(1, 0); g.addEdge(0, 2); g.addEdge(2, 1); g.addEdge(0, 3); g.addEdge(3, 4); System.out.println("Strongly Connected Components:"); g.printSCCs(); } }
Im obigen Code definieren wir zunächst eine Graph
-Klasse zur Darstellung des Graph. Die Methode addEdge
wird zum Hinzufügen von Kanten zum Diagramm verwendet, die Methode DFSUtil
verwendet Rekursion, um eine DFS-Durchquerung durchzuführen, und die Methode getTranspose
wird dazu verwendet Um die Transponierte des Diagramms zu berechnen, wird die Methode printSCCs
verwendet, um jede stark verbundene Komponente auszudrucken. Graph
类来表示图。addEdge
方法用于向图中添加边,DFSUtil
方法使用递归的方式进行DFS遍历,getTranspose
方法用于计算图的转置,printSCCs
方法用于打印出各个强连通分量。
在Main
类中,我们创建一个具有5个顶点的图,并向图中添加边。然后,调用printSCCs
Main
erstellen wir ein Diagramm mit 5 Eckpunkten und fügen dem Diagramm Kanten hinzu. Rufen Sie dann die Methode printSCCs
auf, um die stark verbundenen Komponenten des Diagramms auszudrucken.
Fazit:
Das obige ist der detaillierte Inhalt vonSo implementieren Sie mit Java den stark verbundenen Komponentenalgorithmus von Diagrammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
