Hvordan implementere dybde første søk i C ++

Hvordan implementere dybde første søk i C ++
Dybde første søk (DFS) er en kraftig rekursiv algoritme som brukes til å søke i alle nodene på en graf eller tre i datastruktur. Det starter søket ved å velge et spesifikt toppunkt og begynner deretter å utforske grafen så langt det er mulig langs hver gren før backtracking. Backtracking skjer når DFS Algoritme nærmer seg en node som ikke har noen naboer å besøke. Når den nærmer seg en node uten naboer, vil den gå tilbake til den forrige noden.

I DFS, Nodene som blir utforsket lagres i en stabeldatastruktur. Kantene som leder oss til uutforskede noder kalles 'Oppdagelseskanter'Mens kantene kommer til å lede allerede besøkte noder kalles'blokkerer kanter'. DFS er nyttig i scenarier når en programmerer ønsker å finne tilkoblede komponenter eller sykluser i en graf.

Følg denne artikkelens retningslinjer for å implementere DFS i c++.

Implementering av DFS i C++

I den følgende delen vil vi gå over hvordan DFS er implementert i C++. Man kan følge de gitte trinnene for å implementere DFS.

  1. Sett rotnoden til et tre eller graf i bunken.
  2. Legg til stabelens øverste element i den besøkte listen.
  3. Oppdag alle de tilstøtende nodene til den besøkte noden og legg til de nodene som ennå ikke har besøkt bunken.
  4. Gjenta trinn 2 og 3 til stabelen er tom.

DFS pseudokode

De DFS Pseudokode vises nedenfor. I i det() funksjon, vi utfører vår DFS funksjon på hver node. Fordi grafen kan ha to frakoblede deler, kan vi kjøre DFS algoritme på hver node for å sikre at vi har dekket hvert toppunkt.

DFS (G A)
en.besøkt = sant
For hver B ∈ G.Adj [a]
Hvis b.Besøkt == FALSE
DFS (G, B)
i det()

For hver A ∈ G
en.Besøkt = falsk
For hver A ∈ G
DFS (G, A)

Her representerer G, A og B grafen, først besøkt Node og Node i bunken.

Implementering av DFS i C++

Et C ++ -program for DFS Implementering er gitt nedenfor:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
mal
KlassedybdefirstSearch

privat:
kart > Adjlist;
offentlig:
DybdefirstSearch ()
void add_edge (t a, t b, bool dir = true)

adjlist [a].push_back (b);
if (dir)

adjlist [b].push_back (a);


void prnt ()

for (auto i: adjlist)
cout<";
for (t oppføring: jeg.sekund)
cout<
cout<

void dfs_helper (t node, kart & besøkte)
Besøkt [Node] = True;
cout << node <<" " << endl;
for (t nabo: adjlist [node])
hvis(!besøkte [nabo])
dfs_helper (nabo, besøkt);



void DFS (T SRC)

kart besøkt;
dfs_helper (src, besøkt);

;
int main ()
DybdefirstSearch g;
g.Add_edge (0,5);
g.Add_edge (0,7);
g.Add_edge (4,7);
g.Add_edge (7,8);
g.Add_edge (2,1);
g.Add_edge (0,6);
g.Add_edge (2,4);
g.Add_edge (3,2);
g.Add_edge (3,6);
g.Add_edge (7,5);
g.Add_edge (5,8);
g.Prnt ();
g.DFS (6);
cout << endl;

I denne koden har vi implementert DFS algoritme etter pseudokoden gitt ovenfor. Vi har 12 par noder. Vi definerte en klasse “G”Som representerer en graf som har toppunkter A og B som representerer besøkte og uvisede noder.

Produksjon

Konklusjon

DFS er en populær søkealgoritme som er nyttig for flere scenarier, for eksempel å finne syklusene i en graf, og få informasjon om de tilkoblede komponentene eller alle hjørner i en graf. Vi beskrev også arbeidet med DFS metode med et eksempel. DFS bruker stabler for å utføre teknikken og kan også brukes på trær.