logo

Algoritmo DFS (Depth First Search).

In questo articolo discuteremo dell'algoritmo DFS nella struttura dei dati. È un algoritmo ricorsivo per cercare tutti i vertici di una struttura dati ad albero o di un grafico. L'algoritmo di ricerca in profondità (DFS) inizia con il nodo iniziale del grafo G e va più in profondità finché non troviamo il nodo obiettivo o il nodo senza figli.

A causa della natura ricorsiva, la struttura dei dati dello stack può essere utilizzata per implementare l'algoritmo DFS. Il processo di implementazione del DFS è simile all'algoritmo BFS.

Il processo passo passo per implementare l'attraversamento DFS è il seguente:

  1. Innanzitutto, crea uno stack con il numero totale di vertici nel grafico.
  2. Ora scegli un vertice qualsiasi come punto iniziale dell'attraversamento e inserisci quel vertice nello stack.
  3. Successivamente, spingi un vertice non visitato (adiacente al vertice in cima allo stack) in cima allo stack.
  4. Ora ripeti i passaggi 3 e 4 finché non rimangono più vertici da visitare dal vertice in cima allo stack.
  5. Se non rimane alcun vertice, torna indietro e prendi un vertice dalla pila.
  6. Ripetere i passaggi 2, 3 e 4 finché lo stack non sarà vuoto.

Applicazioni dell'algoritmo DFS

Le applicazioni dell'utilizzo dell'algoritmo DFS sono fornite come segue:

  • L'algoritmo DFS può essere utilizzato per implementare l'ordinamento topologico.
  • Può essere utilizzato per trovare i percorsi tra due vertici.
  • Può anche essere utilizzato per rilevare cicli nel grafico.
  • L'algoritmo DFS viene utilizzato anche per i puzzle a una soluzione.
  • DFS viene utilizzato per determinare se un grafico è bipartito o meno.

Algoritmo

Passo 1: SET STATUS = 1 (stato pronto) per ciascun nodo in G

come bloccare gli annunci di YouTube su Android

Passo 2: Spingi il nodo iniziale A nello stack e imposta il suo STATUS = 2 (stato di attesa)

Passaggio 3: Ripetere i passaggi 4 e 5 finché lo STACK non sarà vuoto

Passaggio 4: Apri il nodo superiore N. Elaboralo e imposta il suo STATUS = 3 (stato elaborato)

Passaggio 5: Metti nello stack tutti i vicini di N che sono nello stato pronto (il cui STATUS = 1) e imposta il loro STATUS = 2 (stato di attesa)

[FINE DEL CICLO]

Passaggio 6: USCITA

array di programmazione Java

Pseudocodice

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

Esempio di algoritmo DFS

Ora comprendiamo il funzionamento dell'algoritmo DFS utilizzando un esempio. Nell'esempio riportato di seguito, esiste un grafico diretto con 7 vertici.

Algoritmo DFS

Iniziamo ora ad esaminare il grafico partendo dal Nodo H.

Passo 1 - Per prima cosa, metti H nella pila.

polimorfismo Java
 STACK: H 

Passo 2 - POP l'elemento in cima allo stack, cioè H, e stampalo. Ora, SPINGI tutti i vicini di H nello stack che sono nello stato pronto.

 Print: H]STACK: A 

Passaggio 3 - POP l'elemento in cima allo stack, cioè A, e stampalo. Ora, SPINGI tutti i vicini di A nello stack che sono nello stato pronto.

 Print: A STACK: B, D 

Passaggio 4 - POP l'elemento in cima allo stack, cioè D, e stampalo. Ora, SPINGI tutti i vicini di D nello stack che sono nello stato pronto.

 Print: D STACK: B, F 

Passaggio 5 - POP l'elemento in cima allo stack, cioè F, e stampalo. Ora, SPINGI tutti i vicini di F nello stack che sono nello stato pronto.

 Print: F STACK: B 

Passaggio 6 - POP l'elemento in cima allo stack, cioè B, e stampalo. Ora, SPINGI tutti i vicini di B nello stack che sono nello stato pronto.

 Print: B STACK: C 

Passaggio 7 - POP l'elemento in cima allo stack, cioè C, e stampalo. Ora, SPINGI tutti i vicini di C nello stack che sono nello stato pronto.

preity zinta
 Print: C STACK: E, G 

Passaggio 8 - POP l'elemento in cima allo stack, cioè G e PUSH tutti gli elementi vicini di G nello stack che sono nello stato pronto.

 Print: G STACK: E 

Passaggio 9 - POP l'elemento in cima allo stack, cioè E, e PUSH tutti gli elementi vicini di E nello stack che sono nello stato pronto.

 Print: E STACK: 

Ora tutti i nodi del grafico sono stati attraversati e lo stack è vuoto.

Complessità dell'algoritmo di ricerca Depth-first

La complessità temporale dell'algoritmo DFS è O(V+E) , dove V è il numero di vertici ed E è il numero di archi nel grafico.

La complessità spaziale dell'algoritmo DFS è O(V).

Implementazione dell'algoritmo DFS

Ora vediamo l'implementazione dell'algoritmo DFS in Java.

In questo esempio, il grafico che stiamo utilizzando per dimostrare il codice è dato come segue:

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