Struttura dati - Profondità primo attraversamento

L'algoritmo Depth First Search (DFS) attraversa un grafico con un movimento in profondità e utilizza uno stack per ricordare di ottenere il vertice successivo per avviare una ricerca, quando si verifica un vicolo cieco in qualsiasi iterazione.

Come nell'esempio sopra, l'algoritmo DFS passa da S ad A a D da G a E a B prima, poi a F e infine a C. Impiega le seguenti regole.

  • Rule 1- Visita il vertice adiacente non visitato. Contrassegnalo come visitato. Mostralo. Mettilo in una pila.

  • Rule 2- Se non viene trovato alcun vertice adiacente, fai apparire un vertice dalla pila. (Apparirà tutti i vertici dalla pila, che non hanno vertici adiacenti.)

  • Rule 3 - Ripeti la regola 1 e la regola 2 fino a quando la pila è vuota.

Passo Traversal Descrizione
1 Inizializza lo stack.
2 marchio Scome visitato e metterlo nella pila. Esplora qualsiasi nodo adiacente non visitato daS. Abbiamo tre nodi e possiamo sceglierne uno qualsiasi. Per questo esempio, prenderemo il nodo in ordine alfabetico.
3 marchio Acome visitato e metterlo nella pila. Esplora qualsiasi nodo adiacente non visitato da A. EntrambiS e D sono adiacenti a A ma siamo interessati solo ai nodi non visitati.
4 Visitare De contrassegnalo come visitato e mettilo nella pila. Ecco, abbiamoB e C nodi, che sono adiacenti a Ded entrambi non sono visitati. Tuttavia, sceglieremo nuovamente in ordine alfabetico.
5 Noi scegliamo B, contrassegnalo come visitato e mettilo in pila. QuiBnon ha alcun nodo adiacente non visitato. Quindi, facciamo scoppiareB dalla pila.
6 Controlliamo lo stack in alto per tornare al nodo precedente e controlliamo se ha nodi non visitati. Qui troviamoD essere in cima alla pila.
7 Solo il nodo adiacente non visitato proviene da D è Cadesso. Quindi visitiamoC, contrassegnalo come visitato e mettilo nella pila.

Come Cnon ha alcun nodo adiacente non visitato, quindi continuiamo a far scoppiare la pila finché non troviamo un nodo che ha un nodo adiacente non visitato. In questo caso, non ce n'è e continuiamo a saltare finché lo stack non è vuoto.

Per conoscere l'implementazione di questo algoritmo nel linguaggio di programmazione C, fare clic qui .