L’algoritmo prende in input un grafo diretto e un nodo e fa tre passi:

  1. calcola l’insieme dei nodi raggiungibili da con la DFS,
  2. 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 ).
  3. 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