logo

DFS (Depth First Search) algoritm

I den här artikeln kommer vi att diskutera DFS-algoritmen i datastrukturen. Det är en rekursiv algoritm för att söka i alla hörn i en träddatastruktur eller en graf. Algoritmen för djup-först-sökning (DFS) börjar med den initiala noden i graf G och går djupare tills vi hittar målnoden eller noden utan barn.

På grund av den rekursiva naturen kan stackdatastrukturen användas för att implementera DFS-algoritmen. Processen att implementera DFS liknar BFS-algoritmen.

Steg-för-steg-processen för att implementera DFS-traverseringen ges enligt följande -

  1. Skapa först en stack med det totala antalet hörn i grafen.
  2. Välj nu vilken vertex som helst som startpunkt för korsningen och tryck in den vertexen i stapeln.
  3. Efter det, tryck en icke-besökt vertex (intill toppen av stapeln) till toppen av stapeln.
  4. Upprepa nu steg 3 och 4 tills det inte finns några hörn kvar att besöka från vertexet på högens topp.
  5. Om ingen vertex finns kvar, gå tillbaka och skjuta en vertex från stapeln.
  6. Upprepa steg 2, 3 och 4 tills bunten är tom.

Tillämpningar av DFS-algoritm

Tillämpningarna för att använda DFS-algoritmen ges enligt följande -

  • DFS-algoritm kan användas för att implementera den topologiska sorteringen.
  • Den kan användas för att hitta vägarna mellan två hörn.
  • Den kan också användas för att upptäcka cykler i grafen.
  • DFS-algoritm används också för pussel med en lösning.
  • DFS används för att avgöra om en graf är tvådelad eller inte.

Algoritm

Steg 1: SET STATUS = 1 (färdigt tillstånd) för varje nod i G

Steg 2: Tryck på startnoden A på stacken och ställ in dess STATUS = 2 (vänteläge)

iPhone emojis på Android

Steg 3: Upprepa steg 4 och 5 tills STACKEN är tom

Steg 4: Pop den översta noden N. Bearbeta den och ställ in dess STATUS = 3 (bearbetat tillstånd)

Steg 5: Tryck på stacken alla grannar till N som är i redoläge (vars STATUS = 1) och ställ in deras STATUS = 2 (vänteläge)

[SLUT PÅ LOOP]

Steg 6: UTGÅNG

Pseudokod

 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() 

Exempel på DFS-algoritm

Låt oss nu förstå hur DFS-algoritmen fungerar genom att använda ett exempel. I exemplet nedan finns en riktad graf med 7 hörn.

DFS-algoritm

Låt oss nu börja undersöka grafen från Nod H.

Steg 1 - Tryck först på H på traven.

 STACK: H 

Steg 2 - POPPA det översta elementet från stapeln, d.v.s. H, och skriv ut det. SKÖT nu alla grannar till H på stacken som är i redo-läge.

 Print: H]STACK: A 

Steg 3 - POPPA det översta elementet från stapeln, dvs A, och skriv ut det. SKÖT nu alla grannar till A på stapeln som är i redo-läge.

 Print: A STACK: B, D 

Steg 4 - POPPA det översta elementet från stapeln, d.v.s. D, och skriv ut det. SKÖT nu alla grannar till D på stacken som är i redo-läge.

 Print: D STACK: B, F 

Steg 5 - POPPA det översta elementet från stapeln, dvs F, och skriv ut det. SKÖT nu alla grannar till F på stacken som är i redo-läge.

 Print: F STACK: B 

Steg 6 - POPPA det översta elementet från stapeln, d.v.s. B, och skriv ut det. SKÖT nu alla grannar till B på stapeln som är i redo-läge.

 Print: B STACK: C 

Steg 7 - POPPA det översta elementet från stapeln, dvs C, och skriv ut det. SKÖT nu alla grannar till C på stacken som är i redo-läge.

 Print: C STACK: E, G 

Steg 8 - POPPA det översta elementet från stacken, d.v.s. G och PUSH alla grannar till G på stacken som är i redo-tillstånd.

 Print: G STACK: E 

Steg 9 - POPPA det översta elementet från stacken, d.v.s. E och PUSH alla grannar till E på stapeln som är i redo-tillstånd.

 Print: E STACK: 

Nu har alla grafnoder passerats och stacken är tom.

Komplexiteten för djup-först sökalgoritm

Tidskomplexiteten för DFS-algoritmen är O(V+E) , där V är antalet hörn och E är antalet kanter i grafen.

Rymdkomplexiteten för DFS-algoritmen är O(V).

Implementering av DFS-algoritm

Låt oss nu se implementeringen av DFS-algoritmen i Java.

I det här exemplet ges grafen som vi använder för att demonstrera koden enligt följande -

DFS-algoritm
 /*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;>