Está en la página 1de 21

GRAFOS

Estructuras de Datos
CCPG1006
DEFINICION

• Un grafo G = (V,A)
1 4
• V, el conjunto de vértices o nodos
– Representan los objetos 5

• A, el conjunto de arcos 7 9

– Representan las relaciones

V = {1, 4, 5, 7, 9}
A= {(1,4), (5,1), (7,9), (7,5), (4,9), (4,1), (1,5), (9,7), (5, 7), (9,4)}
TIPOS DE GRAFOS

Grafos no dirigidos Grafos dirigidos


Si los pares de nodos de los arcos Si los pares de nodos que forman
arcos son ordenados. Ej.: (u->v)
no son ordenados Ej.: u-v

1 4 C E

5
F

7 9 D H

V = {1, 4, 5, 7, 9}
V = {C, D, E, F, H}
A= {(1,4), (5,1), (7,9), (7,5), (4,9),
A= {(C,D), (D,F), (E,H), (H,E), (E,C)}
(4,1), (1,5), (9,7), (5, 7), (9,4)}
OTROS CONCEPTOS

• Arista
– Es un arco de un grafo no dirigido
9
• Vértices adyacentes Guayaquil Quito
7 8
– Vértices unidos por un arco
• Factor de Peso Ambato
Cuenca
5
– Valor que se puede asociar con un 7
arco
– Depende de lo que el grafo 5
represente Riobamba
– Si los arcos de un grafo tienen F.P.
• Grafo valorado
GRADOS DE UN NODO

En Grafo No Dirigido En Grafo Dirigido


– Grado(V) Grado de entrada, Graden(V)
• Número de aristas que
contiene a V Número de arcos que llegan a V
Grado de Salida, Gradsal(V)
9
Guayaquil Quito Número de arcos que salen de V
7 8

C E
Ambato
5
Cuenca
7

Riobamba F
5
D H
Grado(Guayaquil) = 3
Gradoent(D) = 1 y Gradsal(D) = 1
CAMINOS

4 7
• Definición A B
10 C
– Un camino (path) P en un grafo G,
desde V0 a Vn: 11
D E F
– Es la secuencia de n+1 vértices 6 9
– Tal que (Vi, Vi+1)  A para 0 i  n Camino A yA4y7
entre
Longitud de camino P = {A, E, 9,
{4, 6, B, 7}
F, A}
El número de arcos que lo Longitud: 3
4
forman
Camino Simple
Ciclo
Camino simple cerrado de
Todos los nodos que lo
long. >= 2
forman son distintos
donde V0 = Vn
CONECTIVIDAD

5
3
Grafo No Dirigido
9
– Conexo
Existe un camino entre 2 7
cualquier par de nodos
A
Grafo Completo
B Existe un arco para cualquier par de
H
D vértices

Grafo Dirigido
4
Fuertemente Conexo
5 8 Existe un camino de ida y de regreso
6 entre cualquier par de nodos
TDA GRAFO
• Datos
– Vértices y
– Arcos( relación entre vértices)

• Operaciones
– void AgregarVertice(Vertice V)
Añadir un nuevo vértice
– void BorrarVertice(Vertice V)
Eliminar un vértice existente
– void Union(Vertice V1, Vertice V2)
Unir dos vértices (crear arco)
– Void BorrarArco(Vertice V1, Vertice V2)
Eliminar un Arco
– bool EsAdyacente(Vertice V1, Vertice V2)
Conocer si dos vértices son o no adyacentes
REPRESENTACION

Dos posibles representaciones


– Matriz de Adyacencia
• Los vértices se representan por índices (0…n)
• Las relaciones de los vértices se almacenan en una
Matriz
– Lista de Adyacencia
• Los vértices forman una lista
• Cada vértice tiene una lista para representar sus
relaciones(arcos)
Si el grafo fuese valorado, en vez
MATRIZ DEelADYACENCIA
de 1, se coloca factor de peso

V3
V0
• Dado un Grafo G = (V, A) 4 V4 7
10
• Sean los Vertices V = {V0, V1, … Vn}
V5
– Se pueden representar por 11
ordinales 0,1,..n V1 6 9 V2
• Como representar los Arcos?
V 0 V1 V 2 V 3 V 4 V 5
– Estos son enlaces entre vértices
V 0 0 1 0 0 0 0
• Puede usarse una matriz V 1 1 0 1 0 0 0
V 2 0 1 0 1 0 0
1, si hay arco (Vi,Vj ) 
V 3 0 0 1 0 0 0

aij 
V 4 0 1
0, si no hay arco (Vi,Vj ) 
0 0 0 0

V 5 0 0 0 0 1 0
IMPLEMENTACION

Los Vértices
Se definen en un
Arreglo
Los Arcos
Se definen en una
Matriz
METODOS GRAFO-MATRIZ
METODOS GRAFO-MATRIZ
LISTA DE ADYACENCIA 4 7
10

11
Si una matriz tiene muchos vértices y pocos
arcos, la Matriz de Adyacencia: 6 9
Tendrá demasiados ceros
Ocupará mucho espacio
Los vértices 4 6
Pueden formar una lista 6 4 9
Los arcos
9 6 7
Son relaciones entre vértices
Se pueden representar con una lista x 7 9
cada vértice
10 11
11 10
IMPLEMENTACION

public class Vertice{


• Cada vértice tiene
Object dato;
– dato
List arcos;
– Una lista de adyacencia }
public class Arco{
• Cada nodo en la lista de adyacencia
Vertice destino;
– Peso del arco
int peso;
–Una referencia al vértice (arco)
}
public class Grafo{
List vertices;
boolean dirigido;
}
METODO UNION
void agregarArco( Vertice v1, Vertice v2){
if (v1.arcos.contains(v2)){
System.out.println("Arco ya existe")
}
else{
v1.arcos.add(new Arco(v2));
if(!this.dirigido)
v2.arcos.add(new Arco(v1));
}
}

void agregarArco( Vertice v1, Vertice v2, int peso){


if (v1.arcos.contains(v2)){
System.out.println("Arco ya existe")
}
else{
v1.arcos.add(new Arco(v2, peso));
if(!this.dirigido)
v2.arcos.add(new Arco(v1, peso));
}
}
RECORRIDOS DEL GRAFO

• Se busca visitar todos los nodos posibles desde un vértice de


partida V cualquiera

• Existen dos posibles recorridos


– En Anchura y
– En Profundidad

B
A D
H
C
T
R
RECORRIDO EN ANCHURA

• Encolar vértice de partida


• Marcarlo como “visitado”
• Mientras la cola no este vacía
– Desencolar vértice W
– Mostrarlo
– Marcar como visitados los vértices adyacentes de W que
no hayan sido ya visitados
– Encolarlos
EJEMPLO

B Se Muestra:
A D D B C H R A T
H
C
T
R

Cola
D
H
R
C
A
B
T H
R
C
A
T T
RECORRIDOS DEL GRAFO

• Se busca visitar todos los nodos posibles desde un vértice de


partida V cualquiera

• Existen dos posibles recorridos


– En Anchura y
– En Profundidad

B
A D
H
C
T
R
RECORRIDO EN PROFUNDIDAD

• Marcar vértice origen V como visitado


• Recorrer en Profundidad
– Cada vértice adyacente de V
– Que no haya sido visitado Se Muestra:

• Ejemplo D C R H T A B

Pila
B
A D
H
T
C H
R
C
A
T D
B
R

También podría gustarte