Hvordan implementere Depth First Search eller DFS for en graf i Java?

Hvordan Implementere Depth First Search Eller Dfs For En Graf I Java



Depth First Search (DFS) er en grafgjennomløpssøkealgoritme som begynner å utforske hver gren fra rotnoden og deretter beveger seg så dypt som mulig for å gå langs hver gren av grafen før den går tilbake. Dette søket er enkelt å implementere og bruker mindre minne sammenlignet med andre traversalalgoritmer. Den besøker alle noder i en tilkoblet komponent og hjelper til med å sjekke banen mellom to noder. DFS kan også utføre topologisk sortering for grafer som Directed Acyclic Graph (DAG).

Denne artikkelen viser fremgangsmåten for å implementere DFS for et gitt tre eller en graf.

Hvordan implementere Depth First Search eller DFS for en graf i Java?

DFS brukes først og fremst til å søke i en graf ved å besøke hver gren/vertex nøyaktig én gang. Den kan oppdage eller identifisere sykluser i en graf som hjelper til med å forhindre vranglåser. Den kan brukes til å løse gåter eller labyrintproblemer. DFS kan implementeres/brukes i grafalgoritmer, webcrawling og kompilatordesign.







For en forklaring, besøk koden nedenfor for Depth First Search eller DFS:



klasse Kurve {
privat LinkedList addNode [ ] ;
privat boolsk Traversert [ ] ;

Kurve ( int hjørner ) {
addNode = ny LinkedList [ hjørner ] ;
Traversert = ny boolsk [ hjørner ] ;

til ( int Jeg = 0 ; Jeg < hjørner ; Jeg ++ )
addNode [ Jeg ] = ny LinkedList ( ) ;
}
tomrom addEdge ( int src, int start ) {
addNode [ src ] . Legg til ( start ) ;
}

Beskrivelse av koden ovenfor:



  • Først kalte klassen ' Kurve ' er skapt. Inni den erklærer en ' LinkedList 'navngitt' addNode[] ' og en matrise av boolsk type kalt ' Traversert[] '.
  • Send deretter toppunktene for konstruktøren av ' Kurve ' klasse som en parameter.
  • Etter det, ' til ”-løkke opprettes for å bevege seg gjennom hver node i den valgte grenen.
  • Til slutt, tomrommet type ' addEdge() ” brukes til å legge til kanter mellom hjørnene. Denne funksjonen tar to parametere: kilden til toppunktet ' src ' og destinasjonspunktet ' start '.

Etter opprettelsen av en graf, la oss nå legge til kode for dybde-først søk eller DFS for den ovenfor opprettede grafen:





tomrom DFS ( int toppunkt ) {
Traversert [ toppunkt ] = ekte ;
System . ute . skrive ut ( toppunkt + ' ' ) ;
Iterator dette = addNode [ toppunkt ] . listIterator ( ) ;
samtidig som ( dette. har Neste ( ) ) {
int adj = dette. neste ( ) ;
hvis ( ! Traversert [ adj ] )
DFS ( adj ) ;
}
}

I kodeblokken ovenfor:

  • Først, ' DFS() '-funksjonen opprettes som får ' toppunkt ' som en parameter. Det toppunktet er merket som besøkt.
  • Skriv deretter ut det besøkte toppunktet ved å bruke ' out.print() 'metoden.
  • Deretter oppretter du en forekomst av ' Iterator ” som itererer over de tilstøtende toppunktene til gjeldende toppunkt.
  • Hvis toppunktet ikke er besøkt, sender det det toppunktet til ' DFS() ' funksjon.

La oss nå lage en ' hoved() ' funksjonsdel for å lage grafen og deretter bruke DFS på det:



offentlig statisk tomrom hoved- ( String args [ ] ) {
Graf k = ny Kurve ( 4 ) ;
k. addEdge ( 0 , 1 ) ;
k. addEdge ( 1 , 2 ) ;
k. addEdge ( 2 , 3 ) ;
k. addEdge ( 3 , 3 ) ;
System . ute . println ( 'Følger er dybden første gjennomgang' ) ;
k. DFS ( 1 ) ;
}
}

Forklaring av koden ovenfor:

  • Lag først et objekt ' k ' for ' Kurve() 'metoden.
  • Deretter ' addEdge() ”-metoden brukes til å legge til kanter mellom flere hjørner. Dette skaper strukturen til grafen vår.
  • Til slutt, send en hvilken som helst toppunktverdi som et argument til den allerede opprettede ' DFS() ' funksjon. For å finne den toppunktbanen fra roten, bruk en dybde-først søkealgoritme. For eksempel en verdi på ' 1 ' sendes til ' DFS() ' funksjon.

Etter slutten av kompileringsfasen:

Utdataene viser at dybde-første-søket har blitt implementert vellykket.

Konklusjon

Depth First Search er en grafoverløpsalgoritme som danner grunnlaget for mange grafalgoritmer som å finne den korteste veien, spennende trær og tilkoblingsanalyse. Den starter fra rotnoden og beveger seg så dypt som mulig til bladnoden eller den siste noden til den grenen før den går tilbake. Denne artikkelen har demonstrert prosedyren for å implementere dybde-først-søket eller DFS for en graf i Java.