Carian luas pertama tidak menggunakan baris gilir
Breadth First, Look (BFS) ialah pengiraan lintasan graf yang digunakan untuk mengkaji pusat dalam gerakan keluasan dalam graf. Penggunaan biasa BFS menggunakan struktur maklumat talian untuk menjejaki hab masuk. Walau apa pun, ia boleh difikirkan untuk memanfaatkan struktur maklumat lain untuk melaksanakan BFS tanpa menggunakan wayar eksplisit.
Satu cara alternatif untuk melaksanakan BFS tanpa wayar adalah dengan menggunakan dua kluster atau rekod: satu untuk hab pada tahap semasa yang sedang disiasat, dan satu untuk hab peringkat seterusnya untuk disiasat. Pada mulanya, senarai peringkat semasa mengandungi pusat sumber.
Pengiraan menyerlahkan senarai tahap semasa dahulu dan pergi ke setiap hab. Bagi setiap hab yang dilalui, hab bersebelahannya diperiksa. Jika hab bersebelahan tidak dilawati, ia ditandakan sebagai dilawati dan ditambah ke senarai peringkat lain. Pemegang akan diteruskan sehingga semua hab dalam senarai tahap semasa telah diluluskan.
Setelah senarai tahap semasa dilalui sepenuhnya, pengiraan diteruskan ke senarai tahap lain dan cincang semula jalan ke hab dan mengakses senarai tahap seterusnya. Penyediaan ini berterusan sehingga tiada lagi nod yang tidak dilawati.
Kaedah penggunaan
Pendekatan mengutamakan keluasan
Pendekatan mengutamakan keluasan
Algoritma BFS bermula dari hab sumber, menyiasat jirannya dan terkini berpindah ke peringkat jiran yang lain. Gunakan struktur maklumat talian untuk menjejaki hab yang anda lawati. Dalam setiap kitaran, pengiraan melawat hab, menandakannya sebagai selesai, dan beratur hab bersebelahan yang belum dilawati. Persediaan ini akan diteruskan sehingga semua pusat yang boleh diakses telah dilawati.
Kod ini memulakan pelaras vektor untuk mewakili senarai carta yang menular. Setiap fail vektor dibandingkan dengan pusat, dan setiap nilai yang direkodkan mengandungi pusat bersebelahan. Traversal BFS dilakukan oleh tugas BFS, yang mengambil hab sumber, bilangan hab N, vektor yang melalui hab, dp berasingan dan vektor v yang digunakan untuk menjejaki hab yang akan dilawati. Tugas bfsTraversal memulakan hab yang hilang dan memadamkan vektor, kemudian memanggil tugas BFS untuk melaksanakan traversal.
Algoritma
Buat perwakilan senarai jangkitan graf.
Memulakan talian untuk menyimpan hab untuk diakses.
Mulakan kluster yang hilang untuk menjejaki nod yang hilang.
Mulakan kelompok pemadaman untuk menyimpan kandungan yang dipadamkan daripada hab sumber pada setiap hab. Tetapkan pembatas hab sumber kepada 0.
Atur barisan hab sumber dan semak sama ada ia telah diakses.
Walaupun saluran paip tidak boleh disucikan, sila lakukan perkara berikut:
Padamkan hab di kepala barisan. Bagi setiap hab jiran yang telah dinyah gilir dan belum dilalui, lakukan perkara berikut: Baris gilir hab jiran. Tandai hab bersebelahan sebagai dilawati. Pemadaman hab jiran dikemas kini untuk menghentikan pemadaman hab (juga 1).
Ulang langkah 6 sehingga baris kosong.
Selepas traversal BFS selesai, gugusan berasingan akan mengandungi selang dari nod sumber ke semua pusat lain dalam graf.
(Pilihan) Anda juga boleh menjejaki setiap hab induk hab dalam traversal BFS untuk pergi dari hab sumber ke semua hab lain dengan cara yang paling mudah.
Contoh
#include <iostream> #include <queue> #include <unordered_set> using namespace std; void bfsTraversal(int adjacencyList[][2], int numVertices, int source) { bool visited[numVertices + 1] = {false}; int distances[numVertices + 1] = {0}; queue<int> vertices; vertices.push(source); visited[source] = true; while (!vertices.empty()) { int node = vertices.front(); cout << node << ", "; vertices.pop(); for (int i = 0; i < 2; i++) { int next = adjacencyList[node][i]; if (!visited[next]) { vertices.push(next); distances[next] = distances[node] + 1; visited[next] = true; } } } } int main() { int adjacencyList[][2] = {{0, 0}, {1, 2}, {3, 4}, {0, 0}, {0, 0}}; int numVertices = 4; int source = 2; bfsTraversal(adjacencyList, numVertices, source); return 0; }
Output
2,3,4,0
Contoh
#include <iostream> #include <vector> using namespace std; void bfsTraversal(vector<vector<int>>& adjacencyList, int N, int source) { vector<bool> visited(N + 1, false); vector<int> distances(N + 1, 0); vector<int> vertices; vertices.push_back(source); visited[source] = true; int curr = 0; while (curr < vertices.size()) { int node = vertices[curr]; cout << node << ", "; for (int i = 0; i < adjacencyList[node].size(); i++) { int next = adjacencyList[node][i]; if (!visited[next]) { vertices.push_back(next); distances[next] = distances[node] + 1; visited[next] = true; } } curr++; } cout << "\nDistances from source " << source << ":\n"; for (int i = 1; i <= N; i++) { cout << "Node " << i << ": " << distances[i] << endl; } } int main() { int N = 8; vector<vector<int>> adjacencyList(N + 1); adjacencyList[0] = {1, 2}; adjacencyList[1] = {2}; adjacencyList[2] = {0, 3}; adjacencyList[3] = {3}; adjacencyList[4] = {5}; adjacencyList[5] = {6, 7}; adjacencyList[6] = {}; adjacencyList[7] = {}; adjacencyList[8] = {}; int source = 5; bfsTraversal(adjacencyList, N, source); return 0; }
Output
5, 6, 7, Distances from source 5: Node 1: 0 Node 2: 0 Node 3: 0 Node 4: 0 Node 5: 0 Node 6: 1 Node 7: 1 Node 8: 0
Kesimpulan
Artikel ini menerangkan pengiraan carian pertama luas (BFS) tanpa menggunakan struktur maklumat baris. Pengiraan BFS biasanya digunakan untuk menavigasi carta mengikut cara langkah demi langkah bermula dari pusat sumber tertentu. Biasanya, laluan digunakan untuk menyimpan hab untuk dilalui. Walau apa pun, artikel ini mengkaji pendekatan alternatif yang menggunakan senarai asas atau pengelompokan untuk menyimpan tahap hab seterusnya.
Penggunaan terpilih ini melengkapkan kajian graf yang luas-pertama. Artikel ini mengesan langkah-langkah pengiraan BFS, seperti memulakan rekod berjangkit, mengekalkan gugusan pergi-to dan pemisahan, dan menggunakan bulatan untuk menekankan peringkat pusat. Ia juga menyediakan arahan kod C yang menggambarkan traversal BFS tanpa menggunakan satu baris. Kod mengkaji graf dengan tepat, mencetak pilih atur traversal BFS dan mengira jarak dari hab sumber ke semua nod lain. Secara keseluruhannya, artikel ini memberikan penjelasan yang jelas dan penggunaan pengiraan BFS yang boleh dilaksanakan tanpa menggunakan garisan, menunjukkan pendekatan alternatif untuk menavigasi graf dengan cara yang luas dahulu.
Atas ialah kandungan terperinci Carian luas pertama tidak menggunakan baris gilir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Apabila anda mengklik medan carian dalam Windows 11, antara muka carian secara automatik mengembang. Ia memaparkan senarai program terbaru di sebelah kiri dan kandungan web di sebelah kanan. Microsoft memaparkan berita dan kandungan trend di sana. Semakan hari ini mempromosikan ciri penjanaan imej DALL-E3 baharu Bing, tawaran "Naga Sembang dengan Bing", maklumat lanjut tentang naga, berita popular daripada bahagian Web, cadangan permainan dan bahagian Carian Arah Aliran. Keseluruhan senarai item adalah bebas daripada aktiviti anda pada komputer anda. Walaupun sesetengah pengguna mungkin menghargai keupayaan untuk melihat berita, semua ini tersedia dengan banyaknya di tempat lain. Orang lain boleh secara langsung atau tidak langsung mengklasifikasikannya sebagai promosi atau pengiklanan. Microsoft menggunakan antara muka untuk mempromosikan kandungannya sendiri,

Bagaimanakah Xianyu mencari pengguna? Dalam perisian Xianyu, kami boleh mencari secara langsung pengguna yang kami ingin berkomunikasi dalam perisian. Tetapi saya tidak tahu cara mencari pengguna. Lihat sahaja di kalangan pengguna selepas mencari. Seterusnya ialah pengenalan yang editor bawa kepada pengguna tentang cara mencari pengguna Jika anda berminat, datang dan lihat! Bagaimana untuk mencari pengguna di Xianyu Jawapan: Lihat butiran di kalangan pengguna yang dicari Pengenalan: 1. Masukkan perisian dan klik pada kotak carian. 2. Masukkan nama pengguna dan klik Cari. 3. Kemudian pilih [Pengguna] di bawah kotak carian untuk mencari pengguna yang sepadan.

Cara menggunakan Carian Terperinci Baidu Enjin carian Baidu kini merupakan salah satu enjin carian yang paling biasa digunakan di China. Ia menyediakan pelbagai fungsi carian, salah satunya ialah carian lanjutan. Carian lanjutan boleh membantu pengguna mencari maklumat yang mereka perlukan dengan lebih tepat dan meningkatkan kecekapan carian. Jadi, bagaimana untuk menggunakan carian lanjutan Baidu? Langkah pertama ialah membuka halaman utama enjin carian Baidu. Pertama, kita perlu membuka laman web rasmi Baidu, iaitu www.baidu.com. Ini adalah pintu masuk ke carian Baidu. Dalam langkah kedua, klik butang Carian Terperinci. Di sebelah kanan kotak carian Baidu, terdapat

Dalam era yang dikuasai oleh kecerdasan, perisian pejabat juga telah menjadi popular, dan borang Wps diterima pakai oleh majoriti pekerja pejabat kerana fleksibiliti mereka. Di tempat kerja, kita dikehendaki bukan sahaja untuk belajar membuat borang yang mudah dan memasukkan teks, tetapi juga untuk menguasai lebih banyak kemahiran operasi untuk menyelesaikan tugasan dalam kerja sebenar Laporan dengan data dan menggunakan borang adalah lebih mudah, jelas dan tepat. Pelajaran yang kami bawa kepada anda hari ini ialah: Jadual WPS tidak dapat mencari data yang anda cari. Mengapa sila semak lokasi pilihan carian? 1. Mula-mula pilih jadual Excel dan klik dua kali untuk membukanya. Kemudian dalam antara muka ini, pilih semua sel. 2. Kemudian dalam antara muka ini, klik pilihan "Edit" dalam "Fail" dalam bar alat atas. 3. Kedua, dalam antara muka ini, klik "

Contoh berikut mencetak fail dalam direktori berdasarkan sambungannya - Contoh importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.stream. Strim; publicclassDemo{ publicstaticvoidmain(String[]args)throwsIOException{ 

Perisian aplikasi Taobao mudah alih menyediakan banyak produk yang bagus Anda boleh membelinya pada bila-bila masa dan di mana-mana sahaja, dan semuanya adalah tulen. Anda boleh mencari dan membeli secara bebas mengikut kehendak anda. Bahagian produk dalam kategori yang berbeza semuanya terbuka pengguna menggunakannya untuk kali pertama Jika anda tidak tahu bagaimana untuk mencari produk, sudah tentu anda hanya perlu memasukkan kata kunci dalam bar carian untuk mencari semua hasil produk Anda tidak boleh berhenti membeli-belah editor akan menyediakan kaedah dalam talian terperinci untuk pengguna Taobao mudah alih mencari nama kedai. 1. Mula-mula buka aplikasi Taobao pada telefon bimbit anda,

Bagaimana untuk menggunakan fungsi PHP untuk mencari dan menapis data? Dalam proses pembangunan menggunakan PHP, selalunya perlu untuk mencari dan menapis data. PHP menyediakan pelbagai fungsi dan kaedah untuk membantu kami mencapai operasi ini. Artikel ini akan memperkenalkan beberapa fungsi dan teknik PHP yang biasa digunakan untuk membantu anda mencari dan menapis data dengan cekap. Carian rentetan Fungsi carian rentetan yang biasa digunakan dalam PHP ialah strpos() dan strstr(). strpos() digunakan untuk mencari kedudukan subrentetan tertentu dalam rentetan Jika wujud, ia akan kembali

Cara menggunakan algoritma carian cincang dalam C++ Algoritma carian cincang ialah teknologi carian dan storan yang cekap Ia menukar kata kunci kepada indeks panjang tetap melalui fungsi cincang, dan kemudian menggunakan indeks ini dalam Carian struktur data. Dalam C++, kita boleh melaksanakan algoritma carian hash dengan menggunakan bekas cincang dan fungsi cincang dalam perpustakaan standard. Artikel ini akan memperkenalkan cara menggunakan algoritma carian hash dalam C++ dan memberikan contoh kod khusus. Memperkenalkan fail pengepala dan ruang nama Pertama, sebelum menggunakan algoritma carian hash dalam C++
