ESTRUCTURA DE DATOS
Dado un escenario
A, el conjunto de arcos 7 9
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
C E Grafos dirigidos
Si los pares de nodos que forman
arcos
F Son ordenados. Ej.: (u->v)
D H
1 4
V = {C, D, E, F, H}
A= {(C,D), (D,F), (E,H), (H,E), (E,C)}
5
Grafos no dirigidos
Si los pares de nodos de los arcos 7 9
No son ordenados Ej.: u-v
Grafo del ejemplo anterior
OTROS CONCEPTOS
Arista
Es un arco de un grafo no dirigido 9
Guayaquil Quito
Vertices adyacente 7 8
5
Grado de Salida, Gradsal(V)
Numero de arcos que salen de V
Riobamba
CAMINOS
4 7
Definicion A B
10 C
Un camino P en un grafo G, desde
V0 a Vn 11
D E F
6 9
Es la secuencia de n+1 vertices
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}
4 Grafo Dirigido
5 8 Fuertemente Conexo
6 Existe un camino entre cualquier par
de nodos
A
Conexo
B
H Existe una cadena entre cualquier
D par de nodos
TDA GRAFO
Datos
Vertices y
Arcos(relacion entre vertices)
Operaciones
void AadirVertice(Grafo G, Vertice V)
Aadir un nuevo vertice
void BorrarVertice(Grafo G, Generico clave)
Eliminar un vertice existente
void Union(Grafo G, Vertice V1, Vertice V2)
Unir dos vertices
Void BorrarArco(Grafo G, Vertice V1, Vertice V2)
Eliminar un Arco
bool EsAdyacente(Grafo G, Vertice V1, Vertice V2)
Conocer si dos vertices son o no adyacentes
REPRESENTACION
Dos posibles representaciones
Estatica: Matriz de Adyacencia
Los vertices se representan por indices(0n)
Las relaciones de los vertices se almacenan en una Matriz
Dinamica: Lista de Adyacencia
Los vertices forman una lista
Cada vertice tiene una lista para representar sus
relaciones(arcos)
Si el grafo fuese valorado, en vez
de 1, se coloca el factor de peso
MATRIZ DE ADYACENCIA
V3
V0
Dado un Grafo G = (V, A) 4 V4 7
Vn} V5
11
Se pueden representar por V1 6 9 V2
ordinales 0,1,..n
V 0 V1 V 2 V 3 V 4 V 5
Como representar los Arcos?
V 0 0 1 0 0 0 0
Estos son enlaces entre vertices
V 1 1 0 1 0 0 0
Puede usarse una matriz 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 0 0 0 0 1
0, si no hay arco (Vi,Vj ) V 5 0 0 0 0 1 0
EL TIPO DE DATO
#define MAX 20
Los Vertices
typedef int [MAX][MAX] MatrizAdy;
Se definen en un typdef Generico[MAX] Vertices;
Arreglo typedef struct Grafo{
G->A[v1][v2] = 1;
if(!G->dirigido)
G->A[v2][v1] = 1;
}
4 7
LISTA DE ADYACENCIA 10
Si una matriz 11
Tiene muchos vertices y 6 9
Pocos arcos
La Matriz de Adyacencia
Tendra demasiados ceros
4 6
Ocupara mucho espacio
Los vertices 6 4 9
Pueden formar una lista, no un vector 9 6 7
Los arcos 7 9
Son relaciones entre vertices
10 11
Se pueden representar con una lista x cada
vertice 11 10
EL TIPO DE DATO
Cada vertice tiene typedef struct Vertice{
Contenido Generico contenido;
Siguiente LSE *LA;
Una lista de adyacencia };
Cola
D
H
R
C
A
B
T H
R
C
A
T T
IMPLEMENTACION
LSE *RecorrerEnAnchura(Grafo G, Vertice V){
LSE *L;
LSE_nodo *sacado, *parco;
Vertice *vsacado, *varco;
Cola Q;
L = malloc(sizeof(LSE));
LSE_Inicializar(L);
Cola_Inicializar(&Q);
V.visitado = TRUE;
EnColar(&Q, LSE_NodoCrear(&V));
while(!Cola_EstaVacia(Q)){
sacado = DesEnColar(&Q);
vsacado = Generico_ObtenerVertice(sacado->G);
LSE_InsertarNodoFin(L, LSE_NodoCrear(vsacado));
for(parco = vsacado->LArcos->header; parco!=NULL; parco = parco->sig){
varco = Generico_ObtenerVertice(parco->G);
if(!varco->visitado){
varco->visitado = TRUE;
EnColar(&Q, LSE_NodoCrear(varco));
}
}
}
return L;
}
RECORRIDO EN
PROFUNDIDAD
Marcar vertice origen V como visitado
Recorrer en Profundidad
Se Muestra:
Cada vertice adyacente de V
Que no haya sido visitado D C R H T A B
Ejemplo
Pila
B
A D
H
T
C H
R
C
A
T D
B
R
EJERCICIO