Tema 9c: Grafos No Dirigidos Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María Departamento de Informática ILI-134 Tema 9c: Grafos No Dirigidos Profesor : Rodrigo Salas e-mail : rsalas@inf.utfsm.cl Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Un grafo no dirigido G consiste en un conjunto de vértices V y un conjunto de arista A. Los vértices se denominan también nodos o puntos y son objetos que pueden tener nombres y otras propiedades. Los aristas son conexiones entre dos vértices y representan relaciones entre los objetos. Una arista es un par no ordenado de vértices (v,w), es decir (v,w)=(w,v) Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Camino: es una secuencia de vértices v1, v2,..., vn, tal que (vi,vi+1) es una arista para 1i<n. Un camino es simple si todos sus vértices son distintos, con excepción de v1 y vn, que pueden ser el mismo. Longitud de un camino: es el número de aristas a lo largo de un camino. Se dice que el camino v1, v2,..., vn, conecta v1 y vn Un grafo es conexo si todos sus pares de vértices están conectados. Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Sea G=(V,A) un grafo con conjunto de vértices V y conjunto de aristas A. Un subgrafo de G es un grafo G’=(V’,A’) donde V’ es un subconjunto de V A’ consta de las aristas (v,w) en A tales que v y w están en V’. Si A’ consta de todas las aristas (v,w) en A, tal que v y w están en V’, entonces G’se conoce como un grafo inducido de G. Un componente conexo de un grafo G es un subgrafo conexo inducido maximal, esto es, un subgrafo conexo inducido que por sí mismo no es un subgrafo propio de ningún otro subgrafo conexo de G. Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Sea G=(V,A) un grafo con conjunto de vértices V y conjunto de aristas A. Un subgrafo de G es un grafo G’=(V’,A’) donde V’ es un subconjunto de V A’ consta de las aristas (v,w) en A tales que v y w están en V’. Si A’ consta de todas las aristas (v,w) en A, tal que v y w están en V’, entonces G’se conoce como un grafo inducido de G. Un componente conexo de un grafo G es un subgrafo conexo inducido maximal, esto es, un subgrafo conexo inducido que por sí mismo no es un subgrafo propio de ningún otro subgrafo conexo de G. Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Un ciclo (simple) de un grafo es un camino (simple) de longitud mayor o igual a tres, que conecta un vértice consigo mismo. Un grafo es cíclico si contiene por lo menos un ciclo. Un grafo conexo acíclico algunas veces se conoce como árbol libre. Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Definiciones Propiedades de los árboles libres: Todo árbol libre con n1 vértices contiene exactamente n-1 aristas. Si se agrega cualquier arista a un árbol libre, resulta un ciclo. Profesor: Rodrigo Salas
Representaciones de Grafos No Dirigidos
Profesor: Rodrigo Salas Matriz de Adyacencia Sea el grafo no dirigido G=(V,A), los vértices V={1,2,...,n}. La matriz de adyacencia para G es una matriz A de dimensión n x n, de elementos booleanos, donde Obs: con frecuencia se usa 1 para verdadero y 0 para falso. Profesor: Rodrigo Salas
Matriz de Adyacencia Etiquetada La matriz de adyacencia etiquetada para G es una matriz A de dimensión n x n, donde Profesor: Rodrigo Salas
Ejemplos de grafos dirigidos: 1 2 3 4 1 2 3 4 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Lista de Adyacencia La lista de adyacencia para un vértice i es una lista, en algún orden, de todos los vértices adyacentes a i. Se puede representar G por medio de un arreglo CABEZA, donde CABEZA[i] es un apuntados a la lista de adyacencia del vértice i. Profesor: Rodrigo Salas
Ejemplos de grafos dirigidos: 1 2 3 4 4 3 2 1 * Profesor: Rodrigo Salas
Algoritmos en Grafos No Dirigidos
Arboles abarcadores de costo mínimo Un árbol abarcador para G es un árbol libre que conecta todos los vértices de V; su costo es la suma de los costos de las aristas del árbol Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Algoritmo de PRIM #include <stdio.h> #define N_max 100 #define INFINITO 1000 struct grafos{ int G[N_max][N_max]; int N_Vertices; }; typedef struct grafos Grafos; void Anula(Grafos *G,int N){ int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) G->G[i][j]=INFINITO; G->N_Vertices=N; } Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Algoritmo de PRIM while(Vertices_seleccionados<N){ min_costo=INFINITO; for (i=0;i<N;i++) if (Vertices[i]==1) for (j=0;j<N;j++) if (Vertices[j]==0) if (min_costo>G.G[i][j]){ u_min=i; v_min=j; min_costo=G.G[i][j]; } Vertices_seleccionados++; Vertices[v_min]=1; T->G[u_min][v_min]=min_costo; T->G[v_min][u_min]=min_costo; void PRIM(Grafos G,Grafos *T){ int Vertices[N_max]; int i,j,N; int u,v,u_min,v_min,min_costo; int Vertices_seleccionados=1; N=G.N_Vertices; for(i=0;i<N;i++){ Vertices[i]=0; } Vertices[0]=1; Anula(T,N); Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 1 4 2 3 5 6 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 1 4 2 3 5 6 1 4 2 3 5 6 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Algoritmo de Kruskal Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 1 4 2 3 5 6 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 1 4 2 3 5 6 1 4 2 3 5 6 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 4 2 3 5 6 Profesor: Rodrigo Salas
Recorridos
Búsqueda en Profundidad void bpf(Vertice v){ Vertice w; MARCA[v]=1; /* Visitado */ for(i=Primero(v);i!=;i=Siguiente(v,i)){ w=Vertice(v,i); if(MARCA[w]==0) bpf(w); } for(v=0;v<Total_nodos;v++){ if (Marca[v]==0) bpf(v); v++; Profesor: Rodrigo Salas
Búsqueda en Profundidad Durante una búsqueda en profundidad en un grafo no dirigido G, todas las aristas pueden ser: Aristas de árbol Aristas de retroceso Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo a c b f d e g a c b f d e g Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Búsqueda en Amplitud void bea(Vertice v){ Grafo T; Vertice x,y; Cola_Vertice C; int MARCA[N_MAX_VERTICES]; ANULA(T); MARCA[v]=1; /* Visitado */ PONE_EN_COLA(v,C); while (!VACIA(C)){ x=FRENTE(C); QUITA_De_COLA(C); for(i=Primero(v);i!=;i=Siguiente(v,i)){ w=Vertice(v,i); if(MARCA[w]==0){ MARCA[w]=1; PONE_EN_COLA(y,C); INSERTA_ARCO(x,y,T) } Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo a c b f d e g a c b f d e g Profesor: Rodrigo Salas
Puntos de Articulación y Componentes Biconexos Un punto de articulación de un grafo es un vértice v tal que cuando se elimina junto con todas las aristas incidentes sobre él, se divide un componente conexo en dos o más partes. Un grafo sin puntos de articulación se llama biconexo. Profesor: Rodrigo Salas
Puntos de Articulación y Componentes Biconexos Realizar una búsqueda en profundidad del grafo. Calcular el numero_bp[v] para todo vértice v. Para cada vértice v, obtener bajo[v] Encontrar los Puntos de Articulación Profesor: Rodrigo Salas
Puntos de Articulación y Componentes Biconexos Realizar una búsqueda en profundidad del grafo. Calcular el numero_bp[v] para todo vértice v. numero_bp[v] es el número asignado al vértice al recorrer el grafo en la búsqueda de profundidad. Ordena los vértices como en un recorrido en orden previo del árbol abarcador en profundidad. Para cada vértice v, obtener bajo[v] Encontrar los Puntos de Articulación Profesor: Rodrigo Salas
Puntos de Articulación y Componentes Biconexos Realizar una búsqueda en profundidad del grafo. Calcular el numero_bp[v] para todo vértice v. bajo[v] es el número_bp más pequeño de v o de cualquier otro vértice w accesible desde v, siguiendo cero o más aristas de árbol hasta un descendiente x de v y después seguir una arista de retroceso (x,w). Se calcula bajo[v] para todos los vértices v, visitándolos en un recorrido orden posterior. Se toma bajo[v] como el mínimo de: número_bp[v] Número_bp[z] para cualquier vérticee z para el cual haya una arista de retroceso (v,z) y Bajo[y] para cualquier hijo y de v. Para cada vértice v, obtener bajo[v] Encontrar los Puntos de Articulación Profesor: Rodrigo Salas
Puntos de Articulación y Componentes Biconexos Realizar una búsqueda en profundidad del grafo. Calcular el numero_bp[v] para todo vértice v. La raíz es un punto de articulación si, y sólo si, tiene dos o más hijos. Un vértice v distinto de la raíz es un punto de articulación si, y sólo si, hay un hijo w de v tal que bajo[w]numero_bp[v] Para cada vértice v, obtener bajo[v] Encontrar los Puntos de Articulación Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo a c b f d e g a c b f d e g Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo numero_bp[a]=1 bajo[a]=1 numero_bp[c]=5 bajo[c]=5 numero_bp[f]=6 bajo[f]=5 numero_bp[g]=7 bajo[g]=5 numero_bp[b]=2 bajo[b]=1 numero_bp[d]=3 bajo[d]=1 numero_bp[e]=4 a c b f d e g Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Pareamiento de Grafos Un grafo cuyos vértices se pueden dividir en dos grupos disjuntos y las aristas presentan un extremo en cada grupo, se conoce como bipartito. El problema del pareamiento consiste en encontrar un subconjunto de las aristas de A de un grafo G=(V,A) en el que ningún par de aristas es incidente sobre el mismo vértice de V. La tarea de la selección de subconjuntos máximos de tales aristas se denomina problema de pareamiento maximal. Un pareamiento completo es aquel en que todo vértice es un punto final de alguna arista en ella. Todo pareamiento completo es maximal. Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 2 3 4 5 6 7 8 9 10 Profesor: Rodrigo Salas
Técnica de caminos aumentados para el Pareamiento de un Grafo Sea C un pareamiento en un grafo G. Un camino que conecte dos vértices no pareados, cuya aristas alternas estén en C, se conoce como camino aumentado relativo a C. Sea D=CA el conjunto maximal de aristas que forman parte del camino aumentado relativo a C, pero no pertenecen a C. D es un pareamiento. Profesor: Rodrigo Salas
Técnica de caminos aumentados para el Pareamiento de un Grafo Iniciar con C= Encontrar un camino aumentado A relativo a C y reemplazar C por D=CA Sí ¿Existen más caminos aumentados? El pareamiento es maximal Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 2 3 4 5 6 7 8 9 10 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 2 4 6 8 9 1 2 4 6 8 9 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 6 2 7 3 8 4 9 5 10 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 2 5 4 6 9 10 2 5 4 6 9 10 Profesor: Rodrigo Salas
Profesor: Rodrigo Salas Ejemplo 1 6 2 7 3 8 4 9 5 10 Profesor: Rodrigo Salas
Fin Tema 9c: Grafos No Dirigidos ¿Preguntas? Universidad Técnica Federico Santa María Departamento de Informática ILI-134 Fin Tema 9c: Grafos No Dirigidos ¿Preguntas? Profesor : Rodrigo Salas e-mail : rsalas@inf.utfsm.cl