Heim Java javaLernprogramm So implementieren Sie mit Java den stark verbundenen Komponentenalgorithmus von Diagrammen

So implementieren Sie mit Java den stark verbundenen Komponentenalgorithmus von Diagrammen

Sep 21, 2023 am 11:09 AM
java Stark verbundener Komponentenalgorithmus

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:

  1. Verwenden Sie zunächst DFS, um jeden Scheitelpunkt im Diagramm zu durchlaufen und die besuchten Scheitelpunkte zu markieren.
  2. Berechnen Sie dann die Transponierung des Diagramms (dh kehren Sie die Richtung der gerichteten Kanten um), um das transponierte Diagramm zu erhalten.
  3. Führen Sie als Nächstes eine DFS-Durchquerung des transponierten Diagramms durch und sortieren Sie die Eckpunkte nach der DFS-Endzeit.
  4. 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();
    }
}
Nach dem Login kopieren

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

In der Klasse 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:

Dieser Artikel stellt die Verwendung von Java zur Implementierung des stark verbundenen Komponentenalgorithmus von Diagrammen vor und bietet spezifische Codebeispiele. Durch das Verständnis und die Beherrschung dieses Algorithmus können Leser Probleme mit der Graphkonnektivität besser handhaben und lösen. Ich hoffe, dieser Artikel kann den Lesern hilfreich sein! 🎜

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!

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 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 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)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

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.

See all articles