Documente Academic
Documente Profesional
Documente Cultură
ndice general: 1. Conceptos bsicos sobre Grafos 2. Representacin de un Grafo: Matriz vs Listas de Adyacencia 3. Representacin de un Grafo Ponderado: la clase Adyacente 4. Representacin de un Grafo ponderado y etiquetado: La clase GrafoDEtiquetado. 5. Recorrido en Profundidad (DFS) de un Grafo 6. Recorrido en Amplitud (BFS) de un Grafo
Los recorridos permiten obtener una secuencia de sus elementos. Recorrido en Profundidad o Depth First Search (DFS)
Generalizacin del Recorrido Pre-Orden de un rbol Explora las aristas del Grafo de manera que se visitan los vrtices adyacentes al recin visitado, con lo que se consigue profundizar en las ramas del Grafo.
Generalizacin del Recorrido por Niveles de un rbol. Explora las Aristas del Grafo de manera que se visitan los vrtices adyacentes al explorado actualmente. Para cada uno de esos vrtices, se exploran sus vecinos, provocando un recorrido en anchura.
8 2 i 1
c 4 g
d 14
9 e 10
a a
8 1 2 3 4 5
a h b g i
2
3 (4) 1 (8) 2 (11)
4 (1) 6 (8)
5 (7)
El valor de visitados[i] indica el orden en el que se ha visitado el Vrtice: De esta manera se interpretar:
visitados[3] = 5 El Vrtice 3 se ha visitado en 5 posicin, es decir, antes se han visitado otros 4 vrtices.
6 c 5 .. ..
Deberemos anotar los vrtices ya visitados para no recorrerlos varias veces. Utilizamos un vector de vrtices ya visitados.
6
2
3
7 6
1
4 5 9 8
1 1
4 5 9 8
2 3 1 1
4 5
7 6
8 9
2 3 1 1
4 5
7 6
8 9
10
2 3 1 1
4 5
8 9
2 3 1 1
4 5
7 6
8 9
11
12
2 3 1 1
4 5
7 6
8 9
2 3 1 1
4 5
7 6
8
9
13
14
2 3 1 1 4
5
7 6
8
9
.....
public abstract class Grafo<E>{ protected int visitados[]; //Para el recorrido DFS protected int ordenVisita; //Orden de visita de los vrtices public String toStringDFS() {...} protected String arrayToString(int v[]){ } public int[] toArrayDFS() { } protected void toArrayDFS(int origen, int res[]) { } } /* Fin de la clase Grafo */
17
19
20
b
11 7
8 2 i 1
1 (8) 2 (11) 0 (4) 6(2) 1 (7) 4 (2)
c c 4 g g
d d 14
9 e 10
a a
8 0
a
f
2 (4) 0 (8) 1 (11) 1 (1) 5 (2) 6 (4) 7 (14)
0| 1| 2| 3| 4| 5| 6| 7|
Vrtice origen: a
3 (1) 5 (8)
Aunque en esta traza los vrtices se numeren de 0..N, de normal los numeramos de 1..N
1 h 2 b 3 g 4 5
i c
4 (7)
7 (7) 5 (4)
2 (8)
6 f 8 (10) 22 ........ .. ..
Vrtice origen: 1 2 3 1 4 5 9 7 6
1: 2 3 4 5 2: 3: 2 6 8 4: 3 8 5: 6: 7 8: 6 7: 2 9: 5 8
23
123456789 000000000 100000000 123450000 123450000 123456070 123456070 123456070 123456870 123456870 123456870 123456879 1 2345 345 4568 568 68 87 7
Determinar el nmero de componentes conexas, a partir del nmero de invocaciones al mtodo toArrayDFS desde el bucle principal. Determinar si un Grafo es acclico. Si se trata de visitar un nodo ya visitado entonces existe un ciclo en el Grafo. Exploracin parcial de un grafo de tamao elevado. Encontrar el camino ms corto entre dos nodos.
27