Rumah Java javaTutorial Cara menggunakan java untuk melaksanakan algoritma sambungan graf

Cara menggunakan java untuk melaksanakan algoritma sambungan graf

Sep 19, 2023 pm 01:27 PM
Laksanakan algoritma sambungan graf algoritma sambungan graf java Java melaksanakan algoritma sambungan

Cara menggunakan java untuk melaksanakan algoritma sambungan graf

Cara menggunakan Java untuk melaksanakan algoritma ketersambungan graf

Pengenalan:
Graf ialah salah satu daripada struktur data biasa sains komputer , yang terdiri daripada nod (bucu) dan tepi. Ketersambungan graf bermakna semua nod dalam graf boleh disambungkan antara satu sama lain melalui tepi. Dalam bidang algoritma dan rangkaian, menilai ketersambungan graf adalah sangat penting kerana ia boleh membantu kami menyelesaikan banyak masalah, seperti penyelesaian masalah dalam rangkaian, analisis hubungan dalam rangkaian sosial, dsb. Artikel ini akan memperkenalkan cara menggunakan Java untuk melaksanakan algoritma sambungan graf dan memberikan contoh kod khusus.

  1. Perwakilan graf
    Di Jawa, kita boleh menggunakan matriks bersebelahan atau senarai bersebelahan graf untuk mewakili graf. Matriks bersebelahan ialah tatasusunan dua dimensi di mana elemen tatasusunan mewakili hubungan sambungan antara nod. Senarai bersebelahan ialah tatasusunan senarai terpaut, di mana setiap senarai terpaut mewakili nod jiran setiap nod.
  2. Depth First Search (DFS) Algorithm
    Depth First Search ialah algoritma untuk merentasi graf. Ia bermula dari nod permulaan dan melawati nod jirannya yang tidak dilawati secara rekursif sehingga tiada nod boleh dicapai. Melalui carian mendalam-pertama, kita boleh merentasi keseluruhan graf dan menentukan sama ada graf disambungkan.

Berikut ialah kod Java yang menggunakan algoritma carian kedalaman pertama untuk menentukan sama ada graf disambungkan:

import java.util.ArrayList;
import java.util.List;

public class GraphConnectivity {
    private int numNodes;
    private List<List<Integer>> adjList;
    private boolean[] visited;

    public GraphConnectivity(int numNodes) {
        this.numNodes = numNodes;
        adjList = new ArrayList<>();
        for (int i = 0; i < numNodes; i++) {
            adjList.add(new ArrayList<>());
        }
        visited = new boolean[numNodes];
    }

    public void addEdge(int src, int dest) {
        adjList.get(src).add(dest);
        adjList.get(dest).add(src);
    }

    private void dfs(int node) {
        visited[node] = true;
        for (int neighbor : adjList.get(node)) {
            if (!visited[neighbor]) {
                dfs(neighbor);
            }
        }
    }

    public boolean isGraphConnected() {
        dfs(0);

        for (boolean visit : visited) {
            if (!visit) {
                return false;
            }
        }

        return true;
    }

    public static void main(String[] args) {
        GraphConnectivity graph = new GraphConnectivity(5);
        graph.addEdge(0, 1);
        graph.addEdge(0, 2);
        graph.addEdge(3, 4);
        
        System.out.println("Is the graph connected? " + graph.isGraphConnected());
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta kelas GraphConnectivity untuk mewakili graf. Gunakan senarai bersebelahan untuk menyimpan sambungan antara nod. Kaedah addEdge digunakan untuk menambah tepi antara nod. Kaedah dfs ialah kaedah rekursif yang digunakan untuk carian pertama mendalam. Kaedah isGraphConnected menyemak ketersambungan graf dengan memanggil dfs(0). GraphConnectivity类来表示一个图。使用邻接表来保存节点之间的连接关系。addEdge方法用于添加节点之间的边。dfs方法是一个递归方法,用于进行深度优先搜索。isGraphConnected方法通过调用dfs(0)来检查图的连通性。

运行以上代码,输出结果为:Is the graph connected? false。这表明图不是连通的,因为节点0、1、2是连通的,节点3、4是连通的,但节点0和节点3不是连通的。

  1. 广度优先搜索(BFS)算法
    广度优先搜索也是一种用于遍历图的算法。它从一个起始节点开始,访问其邻居节点,并逐层遍历,直到找到目标节点或遍历完整个图。通过广度优先搜索,我们可以找到两个节点之间的最短路径,也可以判断图是否连通。

下面是使用广度优先搜索算法来判断一个图是否连通的Java代码:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class GraphConnectivity {
    private int numNodes;
    private List<List<Integer>> adjList;
    private boolean[] visited;

    public GraphConnectivity(int numNodes) {
        this.numNodes = numNodes;
        adjList = new ArrayList<>();
        for (int i = 0; i < numNodes; i++) {
            adjList.add(new ArrayList<>());
        }
        visited = new boolean[numNodes];
    }

    public void addEdge(int src, int dest) {
        adjList.get(src).add(dest);
        adjList.get(dest).add(src);
    }

    public boolean isGraphConnected() {
        Queue<Integer> queue = new LinkedList<>();
        int startNode = 0;
        queue.offer(startNode);
        visited[startNode] = true;

        while (!queue.isEmpty()) {
            int node = queue.poll();

            for (int neighbor : adjList.get(node)) {
                if (!visited[neighbor]) {
                    queue.offer(neighbor);
                    visited[neighbor] = true;
                }
            }
        }

        for (boolean visit : visited) {
            if (!visit) {
                return false;
            }
        }

        return true;
    }

    public static void main(String[] args) {
        GraphConnectivity graph = new GraphConnectivity(5);
        graph.addEdge(0, 1);
        graph.addEdge(0, 2);
        graph.addEdge(3, 4);

        System.out.println("Is the graph connected? " + graph.isGraphConnected());
    }
}
Salin selepas log masuk

在上述代码中,我们调用Queue来实现广度优先搜索。我们通过queue.offer(startNode)

Jalankan kod di atas, hasil output ialah: Adakah graf disambungkan? Ini menunjukkan bahawa graf tidak bersambung, kerana nod 0, 1, 2 disambungkan, nod 3, 4 disambungkan, tetapi nod 0 dan nod 3 tidak disambungkan.

    Algoritma Breadth-first search (BFS)

    Breadth-first search juga merupakan algoritma untuk merentasi graf. Ia bermula dari nod permulaan, melawati nod jirannya dan merentasi lapisan demi lapisan sehingga ia menemui nod sasaran atau merentasi keseluruhan graf. Melalui carian luas-pertama, kita boleh mencari laluan terpendek antara dua nod dan menentukan sama ada graf disambungkan.

    #🎜🎜#Berikut ialah kod Java yang menggunakan algoritma carian luas pertama untuk menentukan sama ada graf disambungkan: #🎜🎜#rrreee#🎜🎜#Dalam kod di atas, kami memanggil Queue untuk melaksanakan carian luas-dahulu. Kami menambah nod permulaan pada baris gilir melalui queue.offer(startNode), dan kemudian masukkan gelung sehingga baris gilir kosong. Berbanding dengan carian mendalam-dahulu, carian luas-dahulu merentasi graf lapisan demi lapisan. #🎜🎜##🎜🎜#Jalankan kod di atas, hasil keluaran ialah: Adakah graf disambungkan? Ini juga menunjukkan bahawa graf tidak disambungkan, kerana nod 0, 1, dan 2 disambungkan, nod 3, dan 4 disambungkan, tetapi nod 0 dan nod 3 tidak disambungkan. #🎜🎜##🎜🎜#Kesimpulan: #🎜🎜#Artikel ini memperkenalkan cara menggunakan Java untuk melaksanakan algoritma ketersambungan graf, termasuk carian mendalam-dahulu dan algoritma carian luas-dahulu. Algoritma ini boleh membantu kami menentukan sama ada graf disambungkan dan mencari laluan terpendek antara dua nod. Melalui algoritma ini, kita boleh lebih memahami masalah yang berkaitan dengan rangkaian komputer dan teori graf dan mengaplikasikannya dalam pembangunan praktikal. Harap artikel ini membantu anda! #🎜🎜#

Atas ialah kandungan terperinci Cara menggunakan java untuk melaksanakan algoritma sambungan graf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

See all articles