DFS
Visita in profondità, acronimo di Depth-First Search.
- SI parte da un vertice
- Scopri il primo nodo
- Prosegui la visita finché non scopri più nodi; a quel punto torni indietro e vai nel ramo non esplorato
GOES DEEP ⇒ VA IN PROFONDITÀ.
Possibili utilizzi
- backtracking
- ricerca esaustiva di tutti i percorsi in un grafo
Concetti fondamentali
Utilizza uno STACK → LIFO Funziona in O(|V| + |E|) e in spazio O(|V|)
Funzionamento
La logica è:
- Aggiungi il nodo di partenza allo stack
- Mentre lo stack non è vuoto
- prendi un nodo dallo stack
- se non è già stato visitato, allora aggiungilo
- per ogni nodo adiacente (figlio)
- se non è già stato visitato, allora inseriscilo nello stack
- prendi un nodo dallo stack
Implementazione
'''
Implement a DFS
'''
def DFS(root, seen):
if root not in seen:
seen.append(root)
if root.left != None and not in seen:
DFS(root.left, seen)
if root.right != None and not in seen:
DFS(root.right, seen)
'''
MAIN
'''
class Node:
def __init__(self, key):
self.value = key
self.left = None
self.right = None
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print("visita DFS:")
seen = []
DFS(root, seen)
for s in seen:
print(s.value)
Approfondimenti: video di Abdul Bari - video di Back To Back SWE