Title: GRAFOS
1GRAFOS
Ing. Andrea Quan
2Grafo Dirigido
- Un directed graph o digraph G es un par (V,E) en
donde - V es un conjunto finito de vertices (estados) y
- E es una relación binaria que representa las
relaciones entre estado y estado (arcos) - Se le llama grafo dirigido porque cada arco tiene
una dirección.
3Grafo Dirigido
G
V 1,2,3,4,5,6 E (1,2), (2,2), (2,4),
(2,5), (4,1), (4,5), (5,4), (6,3)
4Grafo no-dirigido
- Un grafo no dirigido se define de la misma manera
que un grafo dirigido, la única diferencia es los
arcos no tiene dirección, funcionan como arcos de
doble dirección. - La relación binaria E que lo representa es
simétrica.
5Grafo no-dirigido
G
V 1,2,3,4,5,6 E (1,2), (1,5), (2,1),
(2,5), (5,1), (5,2), (3,6), (6,3)
6Paths
A
B
Length 3
7Representación de un Grafo
- Existen dos maneras conocidas para representar un
grafo - Una colección de listas de adyacencia
- Representada con un arreglo de listas
encadenadas con length igual al número de estados - Una matriz de adyacencia
- Con casillas que representan las relaciones de
todos los estados con todos los estados.
8Ejemplo Grafo dirigido
9Ejemplo Grafo no dirigido
10Weighted Graphs
- Es la misma definición, solo que cada arco tiene
asociado a el un peso.
11Breadth-first search
- Breadth-first search es uno de los dos algoritmos
de búsqueda que veremos en clase - Teniendo un vertice inicial s, breadth-first
search descubre todos los vertices que pueden ser
alcanzados desde s, y calcula la distancia que
existe hacia ellos
12Breadth-first search
- El algoritmo descubre todos los vértices a una
distancia k de s, antes de descubrir cualquier
vértice a una distancia k 1 de s. - Para ir mantener la información del proceso, el
algoritmo colorea cada nodo blanco, gris o negro. - Blanco ? vertice no descubierto
- Gris ? vertice descubierto
- Negro ? vertice descubierto, todos los vertices
adyacentes también descubiertos
13BFS(G,s) for each vertex u ? VG s
coloru WHITE, du ?, ?u
null colors GRAY , ds 0, ?u null,
Q ? Q.enqueue(s) while (Q ! ? ) u
Q.dequeue() for each v ? Adju if
colorv WHITE colorv GRAY dv
du 1 ?v u Q.enqueue(v)
coloru BLACK
14Ejemplo
Inicial C
15Ejemplo
?
Inicial C
16Ejemplo
?
0
Inicial C
Q ?
17Ejemplo
?
Inicial C
Q
18Ejemplo
?
Inicial C
Q
U C
19Ejemplo
?
Inicial C
Q
U C
20Ejemplo
?
Inicial C
Q
U C
21Ejemplo
?
Inicial C
Q
U C
22Ejemplo
?
Inicial C
Q
U A
23Ejemplo
?
Inicial C
Q
U A
24Ejemplo
?
Inicial C
Q
U A
25Ejemplo
?
Inicial C
Q
U D
26Ejemplo
?
Inicial C
Q
U D
27Ejemplo
?
Inicial C
Q
U D
28Ejemplo
?
Inicial C
Q
U D
29Ejemplo
?
Inicial C
Q
U B
30Ejemplo
?
Inicial C
Q
U B
31Ejemplo
?
Inicial C
Q
U E
32Ejemplo
?
Inicial C
Q
U E
33Ejemplo
?
Inicial C
Q
U E
34Ejemplo
?
Inicial C
Q
U E
35Ejemplo
?
Inicial C
Q
U F
36Ejemplo
?
Inicial C
Q
U F
37Ejemplo
?
Inicial C
Q
U F
38Ejemplo
?
Inicial C
Q
U G
39Ejemplo
?
Inicial C
Q
U H
40Breadth-first tree
?
41Depth-first search
- Este algoritmo recorre TODO el grafo.
- Utiliza la misma técnica que breadth-first search
coloreando los estados. - No guarda distancias entre nodos (ya que recorre
todos los nodos)
42DFS() for each vertex u ? VG coloru
WHITE ?u null time 0 for
each vertex u ? VG if coloru WHITE
DFS-Visit(u)
43DFS-Visit(u) coloru GRAY time time
1 du time for each v ? Adju if
colorv WHITE ?v u DFS-Visit(v)
coloru BLACK fu time time 1
44Ejemplo
45Ejemplo
TIME 0
46Ejemplo
1/
TIME 1
47Ejemplo
1/
2/
TIME 2
48Ejemplo
1/
2/
3/
TIME 3
49Ejemplo
1/
2/
3/
4/
TIME 4
50Ejemplo
1/
2/
3/
4/5
TIME 5
51Ejemplo
1/
2/
3/6
4/5
TIME 6
52Ejemplo
1/
2/7
3/6
4/5
TIME 7
53Ejemplo
1/8
2/7
3/6
4/5
TIME 8
54Ejemplo
9/
1/8
2/7
3/6
4/5
TIME 9
55Ejemplo
9/
1/8
2/7
3/6
4/5
10/
TIME 10
56Ejemplo
9/
1/8
2/7
3/6
4/5
10/11
TIME 11
57Ejemplo
9/12
1/8
2/7
3/6
4/5
10/11
TIME 12
58Ejemplo
9/12
1/8
2/7
3/6
4/5
10/11
TIME 12
59Ejemplo