Dfs

5
DFS DFS DEPTH-FIRST SEARCH DEPTH-FIRST SEARCH

Transcript of Dfs

Page 1: Dfs

DFSDFS

DEPTH-FIRST SEARCHDEPTH-FIRST SEARCH

Page 2: Dfs

1.1. Es un método de exploración de grafos. Parte Es un método de exploración de grafos. Parte desde un vértice llamado desde un vértice llamado fuentefuente, explorando , explorando recursivamente sus sucesores. cada arco es recursivamente sus sucesores. cada arco es explorado desde el último vértice descubierto explorado desde el último vértice descubierto vv, , cuando todos los arcos desde cuando todos los arcos desde v v han sido han sido explorados, la búsqueda retrocede para explorar explorados, la búsqueda retrocede para explorar los arcos, comenzando desde el vértice desde el los arcos, comenzando desde el vértice desde el cual cual vv fue descubierto. fue descubierto.

2.2. El proceso continúa hasta que todos lo vértices El proceso continúa hasta que todos lo vértices alcanzables desde el vértice fuente original han alcanzables 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értice uno de ellos es seleccionado como nuevo vértice fuente y la búsqueda se repite. fuente y la búsqueda se repite.

Page 3: Dfs

DFS_forest (G)DFS_forest (G){{

forfor cada vértice cada vértice uu V V{{

Marca[Marca[uu]= NO_VISITADO;]= NO_VISITADO;Padre[Padre[uu]= NULO;]= NULO;

}}forfor cada vértice cada vértice uu V V

ifif Marca[ Marca[uu]= NO_VISITADO]= NO_VISITADODFSDFS (G, u);(G, u);

}}DFSDFS (G, (G, uu))

{{Marca[Marca[uu]= VISITADO;]= VISITADO;

forfor cada vértice cada vértice vv Adyacente[ Adyacente[uu]]if if Marca[Marca[vv]= NO_VISITADO]= NO_VISITADO

{{Padre[Padre[vv]=]= u u;;DFS (G,DFS (G,vv););

}}}}

Page 4: Dfs

Ejemplo:Ejemplo:

Orden topológico: c2 c4 c1 c3 c5

Page 5: Dfs

Algoritmo para encontrar las Algoritmo para encontrar las componentes conectadas:componentes conectadas:

Aplicar DFS-Forest (G) rotulando Aplicar DFS-Forest (G) rotulando los vértices de G en post-orden los 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 de comenzando 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ón 4. Cada árbol de exploración resultante del paso 3 es una resultante del paso 3 es una componente fuertemente componente fuertemente conectada. conectada.