logo

BFS algoritmas Java

Kas yra BFS?

Breadth-First Search (BFS) yra pagrįsta perėjimo mazgais, įtraukiant kiekvieno mazgo kaimynus į eilę, pradedant nuo šakninio mazgo. Grafo BFS yra panašus į medžio BFS, išskyrus tai, kad grafikai gali turėti ciklus. Priešingai nei atliekant paiešką pagal gylį, visi kaimyniniai mazgai tam tikrame gylyje yra tiriami prieš pereinant į kitą lygį.

BFS algoritmas

Toliau pateikiami žingsniai, susiję su plačios paieškos naudojimu grafiko tyrinėjimui:

  1. Paimkite grafiko gretimų matricos arba gretimų sąrašo duomenis.
  2. Sukurkite eilę ir užpildykite ją elementais.
  3. Suaktyvinkite šakninį mazgą (tai reiškia, kad šakninis mazgas būtų gaunamas eilės pradžioje).
  4. Ištraukite eilės pavadinimą (arba pradinį elementą), tada į eilę įtraukite visus šalia esančius eilės mazgus iš kairės į dešinę. Tiesiog pašalinkite galvutę ir tęskite operaciją, jei mazgas neturi netoliese esančių mazgų, kuriuos reikia ištirti. (Pastaba: jei atsiranda kaimynas, kuris anksčiau buvo ištirtas arba yra eilėje, nedėkite jo į eilę, o praleiskite.)
  5. Tęskite taip, kol eilė bus tuščia.

BFS programos

Dėl algoritmo lankstumo „Breadth-First Search“ yra gana naudinga realiame pasaulyje. Štai keletas iš jų:

  1. Peer-to-peer tinkle aptinkami peer mazgai. Dauguma „torrent“ klientų, tokių kaip „BitTorrent“, „uTorrent“ ir „qBittorent“, naudoja šį procesą, norėdami tinkle rasti „sėklas“ ir „bendradarbius“.
  2. Indeksas sukurtas naudojant žiniatinklio tikrinimo grafiko perėjimo metodus. Procedūra prasideda nuo šaltinio puslapio kaip šakninio mazgo ir tęsiasi iki visų antrinių puslapių, susietų su šaltinio puslapiu (ir šis procesas tęsiasi). Dėl sumažėjusio rekursijos medžio gylio „Breadth-First Search“ čia turi būdingą pranašumą.
  3. Naudodami GPS navigacijos sistemas, naudodami GPS, atlikite paiešką, kad surastumėte netoliese esančias svetaines.
  4. Cheney technika, kurioje naudojama paieškos pagal plotį koncepcija, naudojama šiukšlėms rinkti.

BFS traversal pavyzdys

Norėdami pradėti, pažvelkime į paprastą pavyzdį. Pradėsime nuo 0 kaip šakninio mazgo ir eisime žemyn diagrama.

eilutė prieš stulpelį
BFS algoritmas Java

1 žingsnis: Eilė (0)

Eilė

0

2 žingsnis: Eilė (0), eilė (1), eilė (3), eilė (4)

Eilė

1 3 4

3 veiksmas: Eilė (1), eilė (2)

java eilutę char

Eilė

3 4 2

4 veiksmas: Eilė (3), eilė (5). 1 į eilę dar kartą nepridėsime, nes 0 jau buvo ištirta.

Eilė

4 2 5

5 veiksmas: Nutraukti į eilę (4)

Eilė

python eilutė surūšiuota
2 5

6 veiksmas: Nutraukti į eilę (2)

Eilė

java daryti kol
5

7 veiksmas: Nutraukti į eilę (5)

Eilė

Eilė dabar tuščia, todėl procesą sustabdysime.

„Java“ programa „Breadth-First Search“.

Yra keletas būdų, kaip elgtis su kodu. Dažniausiai aptarsime veiksmus, susijusius su pirmosios plačios paieškos „Java“ diegimu. Grafams saugoti galima naudoti gretimų vietų sąrašą arba gretimų matricą; bet kuris metodas yra priimtinas. Gretimų sąrašas bus naudojamas mūsų grafikai mūsų kode pavaizduoti. Diegiant „Breadth-First Search“ algoritmą „Java“, daug lengviau susidoroti su gretimų sąrašu, nes turime pereiti prie kiekvieno mazgo prijungtų mazgų sąrašą tik tada, kai mazgas pašalinamas iš eilės (arba pradžios). eilė.

Grafikas, naudojamas kodui parodyti, bus toks pat, kaip ir ankstesniame pavyzdyje.

BFSTraversal.java

 import java.io.*; import java.util.*; public class BFSTraversal { private int node; /* total number number of nodes in the graph */ private LinkedList adj[]; /* adjacency list */ private Queue que; /* maintaining a queue */ BFSTraversal(int v) { node = v; adj = new LinkedList[node]; for (int i=0; i<v; i++) { adj[i]="new" linkedlist(); } que="new" void insertedge(int v,int w) adj[v].add(w); * adding an edge to the adjacency list (edges are bidirectional in this example) bfs(int n) boolean nodes[]="new" boolean[node]; initialize array for holding data int a="0;" nodes[n]="true;" que.add(n); root node is added top of queue while (que.size() !="0)" n="que.poll();" remove element system.out.print(n+' '); print (int i="0;" < adj[n].size(); iterate through linked and push all neighbors into if (!nodes[a]) only insert nodes they have not been explored already nodes[a]="true;" que.add(a); public static main(string args[]) bfstraversal graph="new" bfstraversal(6); graph.insertedge(0, 1); 3); 4); graph.insertedge(4, 5); graph.insertedge(3, graph.insertedge(1, 2); 0); graph.insertedge(2, graph.insertedge(5, system.out.println('breadth first traversal is:'); graph.bfs(0); pre> <p> <strong>Output:</strong> </p> <pre> Breadth First Traversal for the graph is: 0 1 3 4 2 5 </pre> <hr></v;>