Prioritas mendalam Traversal
Prioritas mendalam Traversal mirip dengan berjalan labirin oleh satu orang:
Seperti yang ditunjukkan pada gambar, pilih tepi dari titik awal untuk berjalan ke titik berikutnya. Sebelum mencapai titik, ditandai bahwa titik ini telah tiba.
Ketika simpul yang ditandai datang, jatuh kembali ke titik sebelumnya, dan kemudian pilih titik yang belum tercapai.
Terus mundur ketika tidak ada bagian ke persimpangan yang telah mundur.
Untuk komponen yang terhubung , lihat konsep: Sub-grafik yang sangat terhubung dari grafik G yang tidak diarahkan disebut komponen yang terhubung dari G. Hanya ada satu komponen yang terhubung dari setiap grafik yang terhubung, yaitu, itu sendiri, dan grafik yang tidak terhubung yang tidak terhubung memiliki beberapa komponen yang terhubung.
Mari kita lihat contoh spesifik:
Paket com.dataStructure.graph; // Temukan komponen unicom dari komponen kelas publik grafik yang tidak sah {grafik grafik pribadi; // array untuk menyimpan input private boolean [] yang dikunjungi; // menyimpan status komponen private yang dikomponasi dengan komponen yang terhubung dengan komponen -komponen intr pribadi int [] mark; // menyimpan tanda -tanda komponen yang bersuara dengan komponen yang bersambung dengan nol/ mark; // menyimpan tanda -tanda komponen yang memiliki komponen yang bersambung dengan NOMETS PRIVATE INT [] Komponen (grafik grafik) {this.graph = grafik; componentcount = 0; // Jumlah awal komponen yang terhubung adalah 0 dikunjungi = boolean baru [graph.v ()]; mark = int int [graph.v ()]; for (int i = 0; i <graph.v (); i ++) {dikunjungi [i] = false;// status -status -node (); i ++) {dikunjungi [i] = false; Komponen node ditandai sebagai -1} untuk (int i = 0; i <graph.v (); i ++) {// Prioritas kedalaman traversal dari simpul yang tidak divisitited if (! Visit [i]) {dfs (i); komponen component ++; // Setelah dfs pada node ke ujung, i component component, nomor ++; {Visit [i] = true; // node i telah diakses tanda [i] = componentcount; // node i termasuk dalam jumlah komponen yang terhubung saat ini (tanda) untuk (int node: graph.adjacentnode (i) {// traverse node node yang berdekatan di grafik if (! visited {// node node yang berdekatan di grafik if (! visited {node]) {node]/ node/ node yang berdekatan di node i di grafik if if (! visited {node]) {node]/ {node]/ node yang berdekatan/ isConnected (int v, int w) {return mark [v] == Mark [w]; // menilai apakah kedua node terhubung berdasarkan tanda komponen yang terhubung yang dimiliki oleh kedua node public getComponentCount () {return componentcount; // kembalikan jumlah komponen yang terhubung dalam grafik}} {public public; // referensi grafik // boolean pribadi [] dikunjungi; // apakah node diakses selama proses DFS // private int count; // Catat jumlah komponen unicom China // id private int []; // Tanda komponen unicom china yang sesuai untuk setiap simpul //// // prioritas kedalaman traversal grafik // void private dfs (int v) {//// dikunjungi [v] = true; // Status akses simpul V diatur ke true // id [v] = ccount; // Tanda unicom china yang sesuai dari simpul V diatur ke ccount //// // melintasi titik kedekatan node v i // untuk (int i: g.adjacentnode (v)) {// // jika titik kedekatan saya belum diakses // if (! Mengunjungi [i]) // // dfs(i);// }// }/// // Constructor to find the connected components of the unrighteous graph // public Components(Graph graph) {//// // Algorithm initialization // G = graph;//// // Visited The accessed status of the node in the array storage graph G // visited = new boolean[GV()];//// // id The mark of the connected komponen di mana simpul termasuk dalam grafik penyimpanan array g // id = int int [gv ()]; //// // // jumlah komponen yang terhubung diinisialisasi ke 0 // ccount = 0; //// // atur semua array yang dikunjungi ke false; Atur semua array ID ke -1 // untuk (int i = 0; i <gv (); i ++) {// dikunjungi [i] = false; // id [i] = -1; //} /// // temukan komponen unicom dari grafik // untuk (int i = 0; i <gv (); i ++) // akses // untuk Accing a no. // // Prioritas kedalaman Traversal // dfs (i); // ccount ++; //} //} /// mengembalikan jumlah komponen unicom dari grafik // int count () {// return ccount; //} /// // query apakah titik v dan poin w terhubung (w raih dari count; isConnected (int v, int w) {// assert v> = 0 && v <gv (); // assert w> = 0 && w <gv (); // return id [v] == id [w]; //} //}Jumlah komponen lulus adalah 3
Meringkaskan
Di atas adalah semua konten artikel ini tentang implementasi pemrograman Java dari contoh -contoh kode komponen prioritas dan konektivitas. Saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Ikuti wulin.com dan Anda akan mendapatkan lebih banyak.