SlideShare una empresa de Scribd logo
GRAFOS ESTRUCTURA DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No jerárquicas Son aplicables en  Química Geografía Ing. Eléctrica e Industrial, etc. Modelado de Redes De alcantarillado Eléctricas Etc. Dado un escenario donde ciertos objetos se relacionan, se puede “modela el grafo” y luego aplicar algoritmos para  resolver diversos problemas Impresora Modem PC2 Servidor PC1
DEFINICION Un grafo G = (V,A) V, el conjunto de vértices o nodos Representan los objetos A, el conjunto de arcos Representan las relaciones V = {1, 4, 5, 7, 9}  A= {(1,4), (4,9), (9,7), (7,5), (5,1),  (4,1), (1,5), (5,7), (7, 9), (9,4)} 1 4 5 7 9
TIPOS DE GRAFOS Grafos dirigidos Si los pares de nodos que forman arcos Son ordenados, de tal forma que en el par la fuente va primero y el destino luego. Ej.: (u->v) Grafos no dirigidos Si los pares de nodos de los arcos No son ordenados, y la relación siempre se considera recíproca Ej.: u-v V = {C, D, E, F, H}  A= {(E,H), (H,E), (E,C), (C,D), (D,F)} Grafo del ejemplo anterior C E D F H 1 4 5 7 9
OTROS CONCEPTOS Arista Es un arco de un grafo no dirigido Vértices adyacentes Vértices unidos por un arco Factor de Peso Valor que se puede asociar con un arco Depende de lo que el grafo represente Si los arcos de un grafo tienen F.P. Grafo valorado Guayaquil Quito Cuenca Ambato Riobamba 5 5 7 9 8 7
GRADOS DE UN NODO En Grafo No Dirigido Grado(V) Numero de aristas que contiene a V En Grafo Dirigido Grado de entrada, Graden(V) Numero de arcos que llegan a V Grado de Salida, Gradsal(V) Numero de arcos que salen de V Gradoent(D) = 1 y Gradsal(D) = 1 Grado(Guayaquil) = 3 C E D F H Guayaquil Quito Cuenca Ambato Riobamba 5 5 7 9 8 7
CAMINOS Definición Un camino P en un grafo G, desde V 0  a V n  es la secuencia de n+1 vertices tal que: (V i , V i+1 )    A para 0   i    n Longitud de camino El número de arcos que lo forman Camino Simple Todos los nodos que lo forman son distintos Ciclo Camino simple cerrado de long. >= 2 Donde V 0  = V n Camino entre 4 y 7 P = {4, 6, 9, 7} Longitud: 3 Camino A y A P = {A, E, B, F, A} Longitud: 4 – 4ciclo 4 7 9 6 10 11 A B C D E F
CONECTIVIDAD Grafo No Dirigido Conexo Existe un camino entre cualquier par de nodos Grafo Dirigido Fuertemente Conexo Existe un camino entre cualquier par de nodos Conexo Existe una cadena entre cualquier par de nodos 3 9 5 7 2 4 5 6 8 H A B D
TDA GRAFO Datos Vértices y Arcos (relación entre vértices) Operaciones void AñadirVertice(Grafo G, Vértice V) Añadir un nuevo vértice void BorrarVertice(Grafo G, Genérico clave, fncmp f) Eliminar un vértice existente void Unión (Grafo G, Vértice V1, Vértice V2) Unir dos vértices Void BorrarArco(Grafo G, Vértice V1, Vértice V2) Eliminar un Arco bool EsAdyacente(Grafo G, Vértice V1, Vértice V2) Conocer si dos vértices son o no adyacentes
REPRESENTACION Dos posibles representaciones Estática: Matriz de Adyacencia Los vértices se representan por índices(0…n) Las relaciones de los vértices se almacenan en una Matriz Dinámica: Lista de Adyacencia Los vértices forman una lista Cada vértice tiene una lista para representar sus relaciones (arcos)
MATRIZ DE ADYACENCIA Dado un Grafo G = (V, A) Sean los Vértices V = {V0, V1, … Vn} Se pueden representar por ordinales 0,1,..n Como representar los Arcos? Estos son enlaces entre vértices Puede usarse una matriz Si el grafo fuese valorado, en vez de 1, se coloca el factor de peso 4 7 9 6 10 11 V 0 V 1 V 2 V 3 V 4 V 5
EL TIPO DE DATO Los Vértices  Se definen en un Arreglo Los Arcos Se definen en una Matriz #define MAX 20 typedef int [MAX][MAX] MatrizAdy; typdef Generico[MAX]  GRAPH_Vertex ; typedef struct  GRAPH { GRAPH_Vertex  V; MatrizAdy A; int nvertices; bool Dirigido; };
UNIR VERTICE void Union(GRAPH G, int v1, int v2){ G->A[v1][v2] = 1; if(!G->dirigido) G->A[v2][v1] = 1; }
LISTA DE ADYACENCIA Si una matriz  Tiene muchos vértices y Pocos arcos La Matriz de Adyacencia Tendrá demasiados ceros Ocupara mucho espacio Los vértices Pueden formar una lista, no un vector Los arcos Son relaciones entre vértices Se pueden representar con una lista x cada vértice 4 7 9 6 10 11 4 6 9 7 10 11 6 4 6 9 11 10 9 7
EL TIPO DE DATO Cada vértice tiene Contenido Una lista de adyacencia Cada nodo en la lista de adyacencia Peso del arco Siguiente Una referencia al vértice (arco) El grafo tiene La lista de vértices Si es grafo dirigido o no struct GRAPH_Vertex { //Vértice Generic info; List *lst_adj; Mark visit; }; struct GRAPH_Edge //Arco { int weight; GRAPH_Vertex *destination; GRAPH_Vertex *origin; }; typedef struct { //Grafo List LVertices; bool dirigido; }  GRAPH ;
ALGUNAS IMPLEMENTACIONES void Union( GRAPH  G,  GRAPH_Vertex  V1,  GRAPH_Vertex  V2, int peso){ GRAPH_Edge *arc; arc = GRAPH_Edge_New(G,V1,V2,peso); if (arc) { List_InsertAfterLast (V1->lst_adj,NodeList_New(arc)); if(!G->dirigido)   List_InsertAfterLast   (V2->lst_adj, NodeList_New(arc)); } }
EJERCICIO Implemente las siguientes operaciones del grafo con lista de adyacencia void AñadirVertice(Grafo G, Vértice V) Añadir un nuevo vértice void BorrarVertice(Grafo G, Genérico clave, fncmp f) Eliminar un vértice existente Void BorrarArco(Grafo G, Vértice V1, Vértice V2) Eliminar un Arco bool EsAdyacente(Grafo G, Vértice V1, Vértice V2) Conocer si dos vértices son o no adyacentes
RECORRIDOS DEL GRAFO Se busca Visitar todos los nodos posibles Desde un vértice de partida D Cualquiera Existen dos posibles recorridos En Anchura y En Profundidad
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 A T H B D C R D Cola Se Muestra: D B C B C C H H R H R A R A T T A T T
IMPLEMENTACION List *RecorrerEnAnchura(GRAPH *G, GRAPH_Vertex *V){ List *L, *LAdj; NodeList *sacado, *parco; GRAPH_Vertex *vsacado; GRAPH_Edge arco; Queue *Q; L = List_New(); Q = Queue_New(); Queue_Push(Q, NodeList_New(V)); while(!Queue_isEmpty(Q)){ sacado = Queue_Pop(Q); vsacado = NodeList_GetContent(sacado); List_InsertAfterLast(L, sacado); if (GRAPH_Vertex_GetVisit(V)==NO_MARKED) { GRAPH_Vertex_SetVisit(V,MARKED); LAdj = GRAPH_Vertex_GetListAdy(V); for(parco = List_GetHeader(LAdj); parco!=NULL; parco = NodeList_GetNext(parco)){ arco = NodeList_GetContent(parco) Queue_Push(Q, NodeList_New(arco->destination)); } } } Queue_Delete(&Q); return L; }
RECORRIDO EN PROFUNDIDAD Marcar vértice origen V como visitado Recorrer en Profundidad Cada vértice adyacente de V Que no haya sido visitado Ejemplo A T H B D C R Se Muestra: Pila D D B C C R R H H A T T A B
EJERCICIO Escriba la implementación del recorrido en profundidad de un grafo a partir de un vértice inicial

Más contenido relacionado

PPTX
Introduction to Graph Theory
PPTX
Conceptos básicos de los grafos
PPTX
Exposicion Caminos de euler
PDF
Grafos resueltos
PPTX
Algoritmo de dijkstra final
PPTX
Glosario teoria de grafos
PPTX
Grafos eulerianos y hamiltonianos
PPT
Arboles Binarios
Introduction to Graph Theory
Conceptos básicos de los grafos
Exposicion Caminos de euler
Grafos resueltos
Algoritmo de dijkstra final
Glosario teoria de grafos
Grafos eulerianos y hamiltonianos
Arboles Binarios

La actualidad más candente (20)

PPT
332 presentacion grafos
PPTX
Grafos eulerianos
PDF
introduction to graph theory
DOC
Grafos resueltos
PPTX
Lista de adyacencia
PPT
Arboles ppt
PPTX
Circuito de Hamilton
PDF
Estructura Discreta 2 Grafos Eulerianos y Hamiltonianos
PPTX
Teoria de grafos Euler
PPT
PPTX
Programación 3: Grafos, representación y operaciones
PDF
Euler and hamilton paths
PPTX
Graphs in data structure
PPTX
Normalizacion base de datos
PDF
teoria de grafos matematica discreta uni
PPTX
Grafo bipartito
PDF
Estructura de Datos - árboles y grafos
332 presentacion grafos
Grafos eulerianos
introduction to graph theory
Grafos resueltos
Lista de adyacencia
Arboles ppt
Circuito de Hamilton
Estructura Discreta 2 Grafos Eulerianos y Hamiltonianos
Teoria de grafos Euler
Programación 3: Grafos, representación y operaciones
Euler and hamilton paths
Graphs in data structure
Normalizacion base de datos
teoria de grafos matematica discreta uni
Grafo bipartito
Estructura de Datos - árboles y grafos
Publicidad

Similar a 19 Grafos 1 (20)

PPT
19. Grafos.ppt
PPT
Grafos Basicos para principiantes paso uno
PPT
Grafos - Estructura de Datos - Matemática discreta
PDF
Teoria-de-grafos
PPT
Grafos.ppt
PPT
Grafos
PPT
Grafos
PDF
Grafos avanzado
PDF
Cátedra de Grafos
PPT
Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...
PPTX
Grafos
PPTX
TRABAJO DE GRAFOS
PPTX
Mapa conceptual
PPT
Introduccion a Grafos 1
PPTX
Mapa Conceptual de Grafos
PPTX
Mapa Conceptual de Grafos
19. Grafos.ppt
Grafos Basicos para principiantes paso uno
Grafos - Estructura de Datos - Matemática discreta
Teoria-de-grafos
Grafos.ppt
Grafos
Grafos
Grafos avanzado
Cátedra de Grafos
Teoria sobre arboles y grafos, presentacion clave sobre las bases de la intel...
Grafos
TRABAJO DE GRAFOS
Mapa conceptual
Introduccion a Grafos 1
Mapa Conceptual de Grafos
Mapa Conceptual de Grafos
Publicidad

Más de Johanna Toledo Morillo (19)

PPT
Logica Juridica
DOC
Contrato Ocasional
DOC
Rodrigo Borja Cevallos
PPT
Ventajas De La ComunicacióN
PPT
Niveles De La ComunicacióN Oral
PPT
PPT
Crear vocabulario
PPT
Gran Depresion
PPT
Comunicación Oral
PPT
Comunicaciòn Interpersonal
PPT
Comunicación Empresarial
PPT
1 Tipos De Datos Ejercicios
PPT
Tipos De Datos
PPT
Tipo de Datos
PPT
U 1 Ae. %2 Bconceptos%2 Bbasicos%2 Bde%2 Badminist.%2 By%2 Borganiz
Logica Juridica
Contrato Ocasional
Rodrigo Borja Cevallos
Ventajas De La ComunicacióN
Niveles De La ComunicacióN Oral
Crear vocabulario
Gran Depresion
Comunicación Oral
Comunicaciòn Interpersonal
Comunicación Empresarial
1 Tipos De Datos Ejercicios
Tipos De Datos
Tipo de Datos
U 1 Ae. %2 Bconceptos%2 Bbasicos%2 Bde%2 Badminist.%2 By%2 Borganiz

19 Grafos 1

  • 1. GRAFOS ESTRUCTURA DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
  • 2. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No jerárquicas Son aplicables en Química Geografía Ing. Eléctrica e Industrial, etc. Modelado de Redes De alcantarillado Eléctricas Etc. Dado un escenario donde ciertos objetos se relacionan, se puede “modela el grafo” y luego aplicar algoritmos para resolver diversos problemas Impresora Modem PC2 Servidor PC1
  • 3. DEFINICION Un grafo G = (V,A) V, el conjunto de vértices o nodos Representan los objetos A, el conjunto de arcos Representan las relaciones V = {1, 4, 5, 7, 9} A= {(1,4), (4,9), (9,7), (7,5), (5,1), (4,1), (1,5), (5,7), (7, 9), (9,4)} 1 4 5 7 9
  • 4. TIPOS DE GRAFOS Grafos dirigidos Si los pares de nodos que forman arcos Son ordenados, de tal forma que en el par la fuente va primero y el destino luego. Ej.: (u->v) Grafos no dirigidos Si los pares de nodos de los arcos No son ordenados, y la relación siempre se considera recíproca Ej.: u-v V = {C, D, E, F, H} A= {(E,H), (H,E), (E,C), (C,D), (D,F)} Grafo del ejemplo anterior C E D F H 1 4 5 7 9
  • 5. OTROS CONCEPTOS Arista Es un arco de un grafo no dirigido Vértices adyacentes Vértices unidos por un arco Factor de Peso Valor que se puede asociar con un arco Depende de lo que el grafo represente Si los arcos de un grafo tienen F.P. Grafo valorado Guayaquil Quito Cuenca Ambato Riobamba 5 5 7 9 8 7
  • 6. GRADOS DE UN NODO En Grafo No Dirigido Grado(V) Numero de aristas que contiene a V En Grafo Dirigido Grado de entrada, Graden(V) Numero de arcos que llegan a V Grado de Salida, Gradsal(V) Numero de arcos que salen de V Gradoent(D) = 1 y Gradsal(D) = 1 Grado(Guayaquil) = 3 C E D F H Guayaquil Quito Cuenca Ambato Riobamba 5 5 7 9 8 7
  • 7. CAMINOS Definición Un camino P en un grafo G, desde V 0 a V n es la secuencia de n+1 vertices tal que: (V i , V i+1 )  A para 0  i  n Longitud de camino El número de arcos que lo forman Camino Simple Todos los nodos que lo forman son distintos Ciclo Camino simple cerrado de long. >= 2 Donde V 0 = V n Camino entre 4 y 7 P = {4, 6, 9, 7} Longitud: 3 Camino A y A P = {A, E, B, F, A} Longitud: 4 – 4ciclo 4 7 9 6 10 11 A B C D E F
  • 8. CONECTIVIDAD Grafo No Dirigido Conexo Existe un camino entre cualquier par de nodos Grafo Dirigido Fuertemente Conexo Existe un camino entre cualquier par de nodos Conexo Existe una cadena entre cualquier par de nodos 3 9 5 7 2 4 5 6 8 H A B D
  • 9. TDA GRAFO Datos Vértices y Arcos (relación entre vértices) Operaciones void AñadirVertice(Grafo G, Vértice V) Añadir un nuevo vértice void BorrarVertice(Grafo G, Genérico clave, fncmp f) Eliminar un vértice existente void Unión (Grafo G, Vértice V1, Vértice V2) Unir dos vértices Void BorrarArco(Grafo G, Vértice V1, Vértice V2) Eliminar un Arco bool EsAdyacente(Grafo G, Vértice V1, Vértice V2) Conocer si dos vértices son o no adyacentes
  • 10. REPRESENTACION Dos posibles representaciones Estática: Matriz de Adyacencia Los vértices se representan por índices(0…n) Las relaciones de los vértices se almacenan en una Matriz Dinámica: Lista de Adyacencia Los vértices forman una lista Cada vértice tiene una lista para representar sus relaciones (arcos)
  • 11. MATRIZ DE ADYACENCIA Dado un Grafo G = (V, A) Sean los Vértices V = {V0, V1, … Vn} Se pueden representar por ordinales 0,1,..n Como representar los Arcos? Estos son enlaces entre vértices Puede usarse una matriz Si el grafo fuese valorado, en vez de 1, se coloca el factor de peso 4 7 9 6 10 11 V 0 V 1 V 2 V 3 V 4 V 5
  • 12. EL TIPO DE DATO Los Vértices Se definen en un Arreglo Los Arcos Se definen en una Matriz #define MAX 20 typedef int [MAX][MAX] MatrizAdy; typdef Generico[MAX] GRAPH_Vertex ; typedef struct GRAPH { GRAPH_Vertex V; MatrizAdy A; int nvertices; bool Dirigido; };
  • 13. UNIR VERTICE void Union(GRAPH G, int v1, int v2){ G->A[v1][v2] = 1; if(!G->dirigido) G->A[v2][v1] = 1; }
  • 14. LISTA DE ADYACENCIA Si una matriz Tiene muchos vértices y Pocos arcos La Matriz de Adyacencia Tendrá demasiados ceros Ocupara mucho espacio Los vértices Pueden formar una lista, no un vector Los arcos Son relaciones entre vértices Se pueden representar con una lista x cada vértice 4 7 9 6 10 11 4 6 9 7 10 11 6 4 6 9 11 10 9 7
  • 15. EL TIPO DE DATO Cada vértice tiene Contenido Una lista de adyacencia Cada nodo en la lista de adyacencia Peso del arco Siguiente Una referencia al vértice (arco) El grafo tiene La lista de vértices Si es grafo dirigido o no struct GRAPH_Vertex { //Vértice Generic info; List *lst_adj; Mark visit; }; struct GRAPH_Edge //Arco { int weight; GRAPH_Vertex *destination; GRAPH_Vertex *origin; }; typedef struct { //Grafo List LVertices; bool dirigido; } GRAPH ;
  • 16. ALGUNAS IMPLEMENTACIONES void Union( GRAPH G, GRAPH_Vertex V1, GRAPH_Vertex V2, int peso){ GRAPH_Edge *arc; arc = GRAPH_Edge_New(G,V1,V2,peso); if (arc) { List_InsertAfterLast (V1->lst_adj,NodeList_New(arc)); if(!G->dirigido) List_InsertAfterLast (V2->lst_adj, NodeList_New(arc)); } }
  • 17. EJERCICIO Implemente las siguientes operaciones del grafo con lista de adyacencia void AñadirVertice(Grafo G, Vértice V) Añadir un nuevo vértice void BorrarVertice(Grafo G, Genérico clave, fncmp f) Eliminar un vértice existente Void BorrarArco(Grafo G, Vértice V1, Vértice V2) Eliminar un Arco bool EsAdyacente(Grafo G, Vértice V1, Vértice V2) Conocer si dos vértices son o no adyacentes
  • 18. RECORRIDOS DEL GRAFO Se busca Visitar todos los nodos posibles Desde un vértice de partida D Cualquiera Existen dos posibles recorridos En Anchura y En Profundidad
  • 19. 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
  • 20. EJEMPLO A T H B D C R D Cola Se Muestra: D B C B C C H H R H R A R A T T A T T
  • 21. IMPLEMENTACION List *RecorrerEnAnchura(GRAPH *G, GRAPH_Vertex *V){ List *L, *LAdj; NodeList *sacado, *parco; GRAPH_Vertex *vsacado; GRAPH_Edge arco; Queue *Q; L = List_New(); Q = Queue_New(); Queue_Push(Q, NodeList_New(V)); while(!Queue_isEmpty(Q)){ sacado = Queue_Pop(Q); vsacado = NodeList_GetContent(sacado); List_InsertAfterLast(L, sacado); if (GRAPH_Vertex_GetVisit(V)==NO_MARKED) { GRAPH_Vertex_SetVisit(V,MARKED); LAdj = GRAPH_Vertex_GetListAdy(V); for(parco = List_GetHeader(LAdj); parco!=NULL; parco = NodeList_GetNext(parco)){ arco = NodeList_GetContent(parco) Queue_Push(Q, NodeList_New(arco->destination)); } } } Queue_Delete(&Q); return L; }
  • 22. RECORRIDO EN PROFUNDIDAD Marcar vértice origen V como visitado Recorrer en Profundidad Cada vértice adyacente de V Que no haya sido visitado Ejemplo A T H B D C R Se Muestra: Pila D D B C C R R H H A T T A B
  • 23. EJERCICIO Escriba la implementación del recorrido en profundidad de un grafo a partir de un vértice inicial