L’algoritmo prende in input un grafo diretto e un nodo e fa tre passi:
- calcola l’insieme dei nodi raggiungibili da con la DFS,
- calcola l’insieme dei nodi che in portano a (si usa lo stesso trucco dell’algoritmo per trovare le sorgenti di un DAG da cui si può raggiungere un determinato nodo, con il grafo trasposto ).
- restituisce l’intersezione di e .
La complessità temporale è .
def componente_nodo(liste, nodo):
n = len(liste)
visitati_1 = [0] * n
dfs(liste, nodo, visitati_1)
visitati_2 = [0] * n
dfs(liste, nodo, visitati_2)
componente = []
for nodo in range(n):
if visitati_1[nodo] == 1 and visitati2[nodo] == 1:
componente.append(nodo)
return componente