Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4.3.3.2 Ejemplos
G4.3.4 Ramificacin y Poda
4.3.4.1 Esquema de la Tcnica
4.3.4.2 Ejemplos
ED 2008/09 2
4.3.1 Recorrido en
Profundidad
Un grafo, G, es un TAD compuesto por
dos conjuntos:
Grafos no dirigidos: V es el conjunto de
vrtices y A el de aristas. Cada arista est
formada por un par de vrtices (v
i
, v
j
)
Grafos dirigidos: N es el conjunto de
nodos y A el de arcos. Cada arco est
formado por un nodo origen y un nodo
destino <n
o
, n
d
>
ED 2008/09 3
4.3.1 Recorrido en
Profundidad
Tenemos un grafo, G = <V, A> y
suponemos que podemos marcar un
vrtice como visitado.
Recorrido en profundidad - Lanza
tantas llamadas recursivas como sea
posible antes de volver de una llamada.
ED 2008/09 4
4.3.1 Recorrido en
Profundidad
Pasos del Algoritmo:
Pto. de partida v - V, lo marcamos como visitado.
Si w - V no visitado y adyacente a v, lo tomamos
como pto. de partida y lanzamos recursivamente el
algoritmo.
Si al regresar de la recursin x - V no visitado y
adyacente a v, hacemos lo mismo que en el pto. 2.
Si y - V que no ha sido visitado, hacemos lo mismo
que en el pto. 2.
Terminamos cuando ' v - V se han visitado.
ED 2008/09 5
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
ED 2008/09 6
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 1: 2, 4, 8
Recorrido: 1, 2
ED 2008/09 7
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 2: 1, 3, 4
Recorrido: 1, 2, 3
ED 2008/09 8
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 3: 2, 4, 5
Recorrido: 1, 2, 3, 4
ED 2008/09 9
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 4: 1, 2, 3, 7
Recorrido: 1, 2, 3, 4 , 7
ED 2008/09 10
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 7: 4, 6, 9
Recorrido: 1, 2, 3, 4, 7, 6
ED 2008/09 11
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 6: 5, 7
Recorrido: 1, 2, 3, 4, 7, 6, 5
ED 2008/09 12
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 5: 3, 6
Recorrido: 1, 2, 3, 4, 7, 6, 5
ED 2008/09 13
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 6: 5, 7
Recorrdo: 1, 2, 3, 4, 7, 6, 5
ED 2008/09 14
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 7: 4, 6, 9
Recorrido: 1, 2, 3, 4, 7, 6, 5, 9
ED 2008/09 15
4.3.1 Recorrido en
Profundidad
2
4
3
5
1
7
8
9
6
Adyacentes a 9: 7, 8
Recorrido: 1, 2, 3, 4, 7, 6, 5, 9 , 8
ED 2008/09 16
4.3.1 Recorrido en
Profundidad
procedimiento recorrido_en_profundidad (G: grafo)
para cada v - N hacer
marca[v] - no visitado
fpara
para cada v - N hacer
si marca[v] = visitado entonces
rp(G, marca, v)
fsi
fpara
fprocedimiento
procedimiento rp (G: grafo; marca:vector[1..n]; v: nodo)
{El nodo v no ha sido visitado anteriormente}
marca[v] - visitado
para cada nodo adyacente a v hacer
si marca[w] = visitado entonces
rp(G, marca, w)
fsi
fpara
fprocedimiento
ED 2008/09 17
4.3.1 Recorrido en
Profundidad
PROCEDURE RecorreProfundidad (g: TGrafo);
VAR
n: integer;
nodo: TNodo;
marca: TVisitado;
c: TipoConjuntoNodos;
BEGIN
DameNodos(g, c);{TAD grafo}
n:= Cardinal(c); {TAD Conjunto}
InicializarVisitados(marca, n); {TAD TVisitado}
WHILE NOT EsConjuntoVacio(c) DO BEGIN
DameNodo(c, nodo); {TAD Conjunto}
Quitar(c, nodo);{TAD Conjunto}
IF NOT EsVisitado(marca,nodo) THEN {TAD TVisitado}
rp(g, nodo, marca);
END;
ED 2008/09 18
4.3.1 Recorrido en
Profundidad
PROCEDURE rp(g:TGrafo; nodos:TNodo; VAR marca:TVisitado);
{El nodo n no ha sido visitado anteriormente}
VAR i, k: integer;
adya: TipoConjuntoNodos;
BEGIN
MarcarVisitado(marca,n); {TAD TVisitado}
Adyacentes(g,adya,n);{TAD grafo, devuelve los adyacentes a n}
WHILE NOT EsConjuntoVacio(adya) DO BEGIN
DameNodo(adya, nodo); {TAD Conjunto}
Quitar(adya, nodo); {TAD Conjunto}
IF PerteneceConjuntoNodos(adya,nodo) AND
NOT EsVisitado(marca,i) THEN
rp(g, marca, nodo);
END;
END;
ED 2008/09 19
4.3.1 Recorrido en
Profundidad
Complejidad:
Cada nodo se visita 1 vez = n llamadas a rp = (n)
Examinamos todas las aristas = (a)