logo

DFS (Depth First Search) algoritme

I denne artikel vil vi diskutere DFS-algoritmen i datastrukturen. Det er en rekursiv algoritme til at søge i alle hjørnerne af en trædatastruktur eller en graf. Depth-first search (DFS)-algoritmen starter med den indledende node af graf G og går dybere, indtil vi finder målknuden eller noden uden børn.

På grund af den rekursive natur kan stakdatastrukturen bruges til at implementere DFS-algoritmen. Processen med at implementere DFS ligner BFS-algoritmen.

Den trinvise proces til implementering af DFS-gennemgangen er givet som følger -

cast int til streng java
  1. Først skal du oprette en stak med det samlede antal hjørner i grafen.
  2. Vælg nu et hvilket som helst toppunkt som startpunkt for gennemkøring, og skub det toppunkt ind i stakken.
  3. Skub derefter et ikke-besøgt toppunkt (ved siden af ​​toppunktet på toppen af ​​stakken) til toppen af ​​stakken.
  4. Gentag nu trin 3 og 4, indtil der ikke er nogen hjørner tilbage at besøge fra toppunktet på stakkens top.
  5. Hvis der ikke er et toppunkt tilbage, skal du gå tilbage og springe et toppunkt fra stakken.
  6. Gentag trin 2, 3 og 4, indtil stakken er tom.

Anvendelser af DFS-algoritme

Anvendelserne for at bruge DFS-algoritmen er givet som følger -

  • DFS-algoritme kan bruges til at implementere den topologiske sortering.
  • Det kan bruges til at finde stierne mellem to hjørner.
  • Det kan også bruges til at detektere cyklusser i grafen.
  • DFS-algoritme bruges også til én løsnings gåder.
  • DFS bruges til at bestemme, om en graf er todelt eller ej.

Algoritme

Trin 1: SET STATUS = 1 (klar tilstand) for hver node i G

Trin 2: Skub startknudepunktet A på stakken og indstil dens STATUS = 2 (ventetilstand)

Trin 3: Gentag trin 4 og 5, indtil STAKKEN er tom

Trin 4: Pop den øverste node N. Bearbejd den og indstil dens STATUS = 3 (behandlet tilstand)

Trin 5: Skub på stakken alle naboerne til N, der er i klar tilstand (hvis STATUS = 1) og indstil deres STATUS = 2 (ventetilstand)

[SLUKKE SLUT]

Trin 6: AFSLUT

til loop bash

Pseudokode

 DFS(G,v) ( v is the vertex where the search starts ) Stack S := {}; ( start with an empty stack ) for each vertex u, set visited[u] := false; push S, v; while (S is not empty) do u := pop S; if (not visited[u]) then visited[u] := true; for each unvisited neighbour w of uu push S, w; end if end while END DFS() 

Eksempel på DFS-algoritme

Lad os nu forstå, hvordan DFS-algoritmen fungerer ved at bruge et eksempel. I eksemplet nedenfor er der en rettet graf med 7 hjørner.

DFS algoritme

Lad os nu begynde at undersøge grafen fra Node H.

Trin 1 - Skub først H ind på stakken.

spil pigeon android
 STACK: H 

Trin 2 - POP det øverste element fra stakken, dvs. H, og udskriv det. SKUB nu alle naboerne til H ind på stakken, der er klar.

 Print: H]STACK: A 

Trin 3 - POP det øverste element fra stakken, dvs. A, og udskriv det. SKUB nu alle naboerne til A ind på stakken, der er klar.

 Print: A STACK: B, D 

Trin 4 - POP det øverste element fra stakken, dvs. D, og ​​udskriv det. SKUB nu alle naboerne til D ind på stakken, der er klar.

 Print: D STACK: B, F 

Trin 5 - POP det øverste element fra stakken, dvs. F, og udskriv det. SKUB nu alle naboerne til F ind på stakken, der er klar.

 Print: F STACK: B 

Trin 6 - POP det øverste element fra stakken, dvs. B, og udskriv det. SKUB nu alle naboerne til B ind på stakken, der er klar.

 Print: B STACK: C 

Trin 7 - POP det øverste element fra stakken, dvs. C, og udskriv det. SKUB nu alle naboerne til C ind på stakken, der er klar.

 Print: C STACK: E, G 

Trin 8 - POP det øverste element fra stakken, dvs. G og SKUB alle naboerne til G ind på stakken, der er i klar tilstand.

 Print: G STACK: E 

Trin 9 - POP det øverste element fra stakken, dvs. E og SKUB alle naboerne til E på stakken, der er i klar tilstand.

 Print: E STACK: 

Nu er alle grafknuderne gennemløbet, og stakken er tom.

Kompleksiteten af ​​dybde-først søgealgoritme

Tidskompleksiteten af ​​DFS-algoritmen er O(V+E) , hvor V er antallet af hjørner og E er antallet af kanter i grafen.

streng i java-metoder

Rumkompleksiteten af ​​DFS-algoritmen er O(V).

Implementering af DFS-algoritme

Lad os nu se implementeringen af ​​DFS-algoritmen i Java.

I dette eksempel er grafen, som vi bruger til at demonstrere koden, givet som følger -

DFS algoritme
 /*A sample java program to implement the DFS algorithm*/ import java.util.*; class DFSTraversal { private LinkedList adj[]; /*adjacency list representation*/ private boolean visited[]; /* Creation of the graph */ DFSTraversal(int V) /*&apos;V&apos; is the number of vertices in the graph*/ { adj = new LinkedList[V]; visited = new boolean[V]; for (int i = 0; i <v; i++) adj[i]="new" linkedlist(); } * adding an edge to the graph void insertedge(int src, int dest) { adj[src].add(dest); dfs(int vertex) visited[vertex]="true;" *mark current node as visited* system.out.print(vertex + ' '); iterator it="adj[vertex].listIterator();" while (it.hasnext()) n="it.next();" if (!visited[n]) dfs(n); public static main(string args[]) dfstraversal dfstraversal(8); graph.insertedge(0, 1); 2); 3); graph.insertedge(1, graph.insertedge(2, 4); graph.insertedge(3, 5); 6); graph.insertedge(4, 7); graph.insertedge(5, system.out.println('depth first traversal for is:'); graph.dfs(0); < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/28/dfs-algorithm-3.webp" alt="DFS algorithm"> <h3>Conclusion</h3> <p>In this article, we have discussed the depth-first search technique, its example, complexity, and implementation in the java programming language. Along with that, we have also seen the applications of the depth-first search algorithm.</p> <p>So, that&apos;s all about the article. Hope it will be helpful and informative to you.</p> <hr></v;>