El algoritmo de búsqueda en profundidad (depth-first search) explora recursivamente los sucesores de cada vértice descubierto, explorando completamente cada rama antes de pasar a la siguiente. Esto permite encontrar las componentes conectadas de un grafo aplicando DFS dos veces, primero en el grafo original y luego en su grafo reverso.
2. 1.1. Es un método de exploración de grafos. ParteEs un método de exploración de grafos. Parte
desde un vértice llamadodesde un vértice llamado fuentefuente, explorando, explorando
recursivamente sus sucesores. cada arco esrecursivamente sus sucesores. cada arco es
explorado desde el último vértice descubiertoexplorado desde el último vértice descubierto vv,,
cuando todos los arcos desdecuando todos los arcos desde vv han sidohan sido
explorados, la búsqueda retrocede para explorarexplorados, la búsqueda retrocede para explorar
los arcos, comenzando desde el vértice desde ellos arcos, comenzando desde el vértice desde el
cualcual vv fue descubierto.fue descubierto.
2.2. El proceso continúa hasta que todos lo vérticesEl proceso continúa hasta que todos lo vértices
alcanzables desde el vértice fuente original hanalcanzables desde el vértice fuente original han
sido descubiertos. Si restan vértices sin descubrir,sido descubiertos. Si restan vértices sin descubrir,
uno de ellos es seleccionado como nuevo vérticeuno de ellos es seleccionado como nuevo vértice
fuente y la búsqueda se repite.fuente y la búsqueda se repite.
5. Algoritmo para encontrar lasAlgoritmo para encontrar las
componentes conectadas:componentes conectadas:
Aplicar DFS-Forest (G) rotulandoAplicar DFS-Forest (G) rotulando
los vértices de G en post-ordenlos vértices de G en post-orden
(apilar). O(m)(apilar). O(m)
Construir el grafo reverso de G,Construir el grafo reverso de G,
es decir GR (invertir los arcos).es decir GR (invertir los arcos).
Aplicar DFS-Forest (GR)Aplicar DFS-Forest (GR)
comenzando por los vértices decomenzando por los vértices de
mayor rótulo (tope de la pila).mayor rótulo (tope de la pila).
O(m)O(m)
4. Cada árbol de exploración4. Cada árbol de exploración
resultante del paso 3 es unaresultante del paso 3 es una
componente fuertementecomponente fuertemente
conectada.conectada.
5 0 1
6 3 2
G =
5 0 1
6 3 2
DFS(G)=
2 6 5
1 3 4
2
0
1
3 5 6
DFS-F(GR
)=
Componentes conectadas
6. Algoritmo para encontrar lasAlgoritmo para encontrar las
componentes conectadas:componentes conectadas:
Aplicar DFS-Forest (G) rotulandoAplicar DFS-Forest (G) rotulando
los vértices de G en post-ordenlos vértices de G en post-orden
(apilar). O(m)(apilar). O(m)
Construir el grafo reverso de G,Construir el grafo reverso de G,
es decir GR (invertir los arcos).es decir GR (invertir los arcos).
Aplicar DFS-Forest (GR)Aplicar DFS-Forest (GR)
comenzando por los vértices decomenzando por los vértices de
mayor rótulo (tope de la pila).mayor rótulo (tope de la pila).
O(m)O(m)
4. Cada árbol de exploración4. Cada árbol de exploración
resultante del paso 3 es unaresultante del paso 3 es una
componente fuertementecomponente fuertemente
conectada.conectada.
5 0 1
6 3 2
G =
5 0 1
6 3 2
DFS(G)=
2 6 5
1 3 4
2
0
1
3 5 6
DFS-F(GR
)=
Componentes conectadas