Académique Documents
Professionnel Documents
Culture Documents
Tema 14 Grafos y su
Implementacin en Java
Parte II
Germn Molt
Escuela Tcnica Superior de Ingeniera Informtica
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
PreOrden (rbol) {
PreOrden(Razrbol);
}
tratar(Razrbol);
Hijo(Razrbol)
PreOrden(Hijo(Razrbol));
DFS(Grafo) {
Verticei Grafo
DFS(Verticei);
}
4
tratar(Vrticei);
adyacente(Vrticei)
DFS(adyacente(Vrticei));
aa
11
hh
8
2
i
2 (8)
3 (4)
3 (11)
1 (8)
4 (1)
1 (4)
2 (11)
6 (8)
....
....
....
....
6 c
5
.. ..
10
14
4
g
5 (7)
Vertices
1
8
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
11
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
1
1
8
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
1
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
33
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
1
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
10
3
1
1
4
5
11
1
0
1
1
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 44 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
1
4
5
12
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 55
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
1
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
1
4
5
13
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
9
0
9
9
8
0
6
6
9
0
9
9
14
3
1
1
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
.....
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 77 - - - 8 - - - - 7 8 4 5
8
0
6
6
9
0
9
9
3
1
4
5
1:2,3,4,5
2
3:2,6,8
6:7
7:2
8:6
4:3,8
5
9:5,8
1
0
1
1
2
0
2
2
3
0
3
3
visitados
4 5 6 7
0 0 0 0
- - - - - - - - - - - 4 - - - 5
- - - 7 - - - 8 - - - - 7 8 4 5
8
0
6
6
6
16
19
20
PorNiveles (rbol) {
PorNiveles(Razrbol);
}
En Grafos se hace:
BFS(Grafo) {
Cola<Integer> q = new
ArrayCola<Integer>();
Verticei Grafo
BFS(Verticei);
}
Cola<NodoABB<E>> q = new
ArrayCola<NodoABB<E>>();
q.encolar(Razrbol);
mientras ( !q.esVacia() ){
r = q.desencolar();
tratar(r);
Hijo(r): q.encolar(Hijo(r));
}
tratar(Vrticei); q.encolar(Vrticei);
mientras ( !q.esVacia() ) {
v = q.desencolar();
Adyacente(v):
tratar(Adyacente(v) );
q.encolar(Adyacente(v));
}
21
Vrtice origen: 1
3
1
4
5
100000000
Visitados
Cola
123456789
000000000
1
1: 2 3 4 5
123450000
2345
2:
123450000
345
3: 2 6 8
123456070
4568
4: 3 8
123456070
568
5:
123456070
68
6: 7
123456870
87
8: 6
123456870
7: 2
123456870
9: 5 8
123456879
aa
11
8
0
2
i
1
cc
9
e
14
gg
dd
0|
1| 2| 3| 4| 5| 6| 7|
10
Vrtice origen: a
1 (8)
2 (4)
1 h
2 (11)
0 (8)
3 (1)
2 b
0 (4)
1 (11)
5 (8)
3 g
6(2)
1 (1)
1 (7)
5 (2)
4 (2)
6 (4)
7 (7)
6 f
8 (10)
.. ..22 ........
7 (14)
5 (4)
4 (7)
2 (8)
24
return arrayToString(toArrayBFS());
}
}
public int[] toArrayBFS() {
int res[] = new int[numVertices() + 1];
visitados = new int[numVertices() + 1];
ordenVisita = 1;
q = new ArrayCola<Integer>();
for ( int i = 1; i <= numVertices(); i++ )
if (visitados[i] == 0) toArrayBFS(i, res);
return res;
}
25
26
27