Está en la página 1de 105

Estructuras no lineales: Grafos

Las estructuras de datos no lineales se caracterizan por no existir una relacin de adyacencia, entre sus elementos, es decir, un elemento puede estar relacionado con cero, uno o ms elementos. La estructura no lineal de datos ms general es el grafo donde sus nodos pueden relacionarse de cualquier manera sin una relacin de orden predefinida.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos


Entre las mltiples aplicaciones que tienen estas estructuras podemos mencionar: Para modelar diversas situaciones tales como: sistemas de aeropuertos, flujo de trfico, y responder a preguntas como: Qu tiempo es ms corto?, Cmo es ms barato?, o Qu camino es ms corto?. Los grafos tambin son utilizados para realizar planificacin de actividades, tareas del computador, planificar operaciones en lenguaje de mquinas para minimizar tiempo de ejecucin. Qu tarea debo hacer primero?. Para representar circuitos elctricos, de aguas etc... , y preguntar, estn todas las componentes conectadas.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos


Los grafos pueden ser utilizados como la estructura bsica para mltiples aplicaciones en el rea de la Computacin. Un grafo G (N, A, f) es un conjunto no vaco, donde: N={n1, n2, ... , nM) es el conjunto de nodos o vrtices A={a1, a2, ..., a K} es el conjunto de aristas y La funcin f : R indica los pares de nodos que estn relacionados. Grafos Dirigidos (Digrafos) En estos grafos, las aristas que comunican dos nodos tienen un nico sentido, una arista puede ir de x a y, pero no de y a x. Se expresa grficamente con flechas que indican el sentido de la relacin entre cada par de nodos.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos


Grafos no dirigidos En estos grafos, las aristas que comunican dos nodos tienen dos sentidos. Si una arista va de x a y, la misma arista va de y a x. Se expresa grficamente por lneas. La representacin grfica de un grafo se define con un crculo o rectngulo para los nodos y las relaciones con lneas o flechas segn sea un grafo no dirigido o un digrafo, respectivamente.

a d

b f Grafo no dirigido

c g

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos a d b f Grafo dirigido c g

Grafo ponderado A cada arista del grafo se le asigna un peso..

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos

Los elementos de un digrafo D = {N, A, f} son el conjunto de nodos N, el conjunto de arcos A y la funcin f : A N x N de pares ordenados de nodos que indican de que nodo sale el arco y a que nodo llega ese arco. Los elementos de un grafo no dirigido G = {N, L, f} son el conjunto de nodos N, el conjunto de lneas L y la funcin f : L N x N de pares no ordenados que indican que esos nodos estn unidos en ambas direcciones.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos


Sea el digrafo D = {N, A, f} donde: N = {1, 2, 3, 4}, A = {a, b, c, d, e, g, h} f(a) = (1, 2), f(b) = (2, 3), f(c) = (1, 3), f(d) = (3, 4), f(e) = (1, 4), f(g) = (4, 2), f(h) = (4, 1).

1 h

a c 3 b

2 e d

g 4

Se dice que el aj A est asociado al par de nodos ( ni , nj ) donde ni , nj N, comienza en ni y termina en nj. As, ni es el nodo inicial y nj es el nodo final. Si ni = 1, nj = 2 y aj = a entonces 1 es el nodo inicial de a y 2 es el nodo terminal de a.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 7

Estructuras no lineales: Grafos Arco incidente: aj es un arco incidente sobre nk , si nk es el nodo terminal de aj. a es el arco incidente sobre 2, pero no sobre 1. Arcos adyacentes: ai y aj son arcos adyacentes si ai y aj son incidentes en el mismo nodo. Ejemplo: c y b son arcos adyacentes, pero c y d no lo son. Arcos paralelos: Dos arcos son paralelos si ellos comienzan y terminan en los mismos nodos. Ejemplo: En D no hay arcos paralelos. Si anexamos a D el arco p cuya f(p) = (1, 2), entonces a y p son arcos paralelos.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos


Bucle o lazo: Si un arco aj comienza en ni y termina en ni, entonces aj es un bucle. Ejemplo: Si f(w) = (3, 3) entonces w es un lazo. Nodos adyacentes: Dados un par de nodos (ni, nj ) que estn unidos por el arco aj, se dice que ni es adyacente a nj por aj. Ejemplo: 1 es adyacente a 2 por a. Grado de incidencia positivo: El grado de incidencia positivo de un nodo nj es el nmero de arcos que tienen como nodo inicial a nj. Ejemplo: El grado de incidencia de 1 es igual a 3. Grado de incidencia negativo: El grado de incidencia negativo de un nodo nj es el nmero de arcos que terminan en nj. Ejemplo: El grado de incidencia negativo de 1 es igual a 1.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

Estructuras no lineales: Grafos Grado de un nodo: Para digrafos es el grado de incidencia positivo menos el grado de incidencia negativo del nodo. Ejemplo: El grado de 1 es igual a 3 1 = 2, el grado del nodo 4 es 2 2 = 0. Para grafos no dirigidos es el nmero de lneas asociadas al nodo. Multiplicidad de un par ordenado (ni, nj): Dado el digrafo D. Si para un par ordenado de nodos (ni, nj) N x N, hay k arcos distintos en A para los que f(aj) = (ni, nj), es decir, hay k arcos que unen ni con nj nj, se dice que el par (ni, nj) tiene multiplicidad k donde k 0. La funcin de multiplicidad m (ni, nj) = k. Ejemplo: m(1, 1) = 0, m(1, 2) = 1, m(1, 3) = 1.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

10

Estructuras no lineales: Grafos


Grafo simple: Un digrafo D es simple si cada par ordenado (ni, nj) N x N tiene como mximo de multiplicidad el valor 1. Ejemplo: El digrafo de la figura anterior es simple. Matriz de conexin: Todo grafo G tiene asociado una matriz M de dos dimensiones de orden |N| x |N|, cuyos elementos representan la multiplicidad del par (ni, nj). Ejemplo: La matrix de conexin del digrafo D es 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 0

M=

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

11

Estructuras no lineales: Grafos Camino: Un camino C del digrafo D es una secuencia de arcos (a1, a2, ..., an) tal que para todo par (ai, aj) de arcos consecutivos en C, el fin de ai coincide con el inicio de aj. b, d es un camino, pero a, c no lo es. Camino simple: Es el camino que no recorre el mismo arco dos veces. b, d, g es un camino simple, pero b, d, g, b no es un camino simple. Camino elemental: Es el camino que no visita un mismo nodo ms de una vez. b, d es un camino elemental, pero b, d, g no lo es.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 12

Estructuras no lineales: Grafos Circuito: Es un camino finito en el que el origen del primer arco coincide con el fin del ltimo. a, b, d, h es un circuito, pero c, d, g no lo es. Circuito simple: Un circuito es simple si a su vez es un camino simple. Ejemplo: b, d, g es un circuito simple, pero e, h, e, h es un circuito no simple. Orden de un camino: Es el nmero de arcos que conforman el camino. Ejemplo: Un bucle tiene un orden igual a 1. b, d, g es un circuito simple de orden 3. Nodo accesible: Un nodo nj es accesible desde otro nodo ni si 1) ni = nj o 2) existe un camino desde ni hasta nj.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 13

Estructuras no lineales: Grafos

Nodo sucesor: Un nodo nj es sucesor de un nodo ni si existe un camino que va desde ni hasta nj. 2 es sucesor de 1. Nodo predecesor: Un nodo ni es predecesor de otro nodo nj si existe un camino que va desde ni hasta nj. 1 es predecesor de 3. Grafo conexo: Un grafo G es conexo si y slo si sus nodos ni no pueden ser divididos en dos conjuntos no vacos N1 y N2 en los que sus caminos desde un punto cualquiera a otro estn en el mismo conjunto.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

14

Estructuras no lineales: Grafos


Subgrafo: Un subgrafo SG de G es un grafo constituido por un subconjunto SN de N y un subconjunto SA de A que conectan los nodos de SN. Si SG = { SN, SA, sf } donde SN N y SA A, SN = {2, 3, 4}, SA = {b, d, g}, sf(b) = (2, 3), sf(d) = (3, 4), sf(g) = (4, 2). Cadena: Para un grafo no dirigido GND es la secuencia de lneas (l1, l2, ..., ln) tal que el fin li coincide con el origen de li+1. Cadena simple: Es la cadena donde ninguna lnea se repite. Cadena elemental: Es la cadena donde ningn nodo se repite. Ciclo: Es una cadena finita donde el nodo inicial de la cadena coincide con el nodo terminal de la misma. Ciclo simple: Es el ciclo que a su vez es una cadena simple.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 15

Estructuras no lineales: Grafos Grafo mltiple: Es un grafo que contiene alguna arista paralela. Digrafo acclico: Es un digrafo que no contiene circuitos. Se le conoce con las siglas dag. Grafos densos: Un grafo se denomina denso si casi todos sus nodos estn conectados, es decir existe un arco para cualquier par de nodos (ni, nj). Grafos no densos: Si todos sus nodos no estn conectados.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 16

Representacin de grafos Las representanciones ms usuales para grafos son: MATRIZ DE ADYACENCIA Usa un arreglo de N*N el que a[x][y] es igual a 0 en caso contrario. Las columnas y las filas de la matriz representan los nodos del grafo. Si existe un arco desde i a j (esto es, el nodo i es adyacente al nodo j)
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 17

(N=nmero de nodos)

en

1 si existe una arista desde el vrtice x al vrtice y

Representacin de grafos

MATRIZ DE ADYACENCIA Si el grafo es ponderado, el costo o peso asociado al arco de i a j se almacena, si no existe el arco, se introduce 0. Si el grafo es no dirigido, la matriz es simtrica M(i,j) = M(j,i). Se conveniente la representacin para grafos densos.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

18

Representacin de grafos

Int v,a; int max =100; int g[max][max]; TablaD<TipoEle> dir; int i,j; for (i=1;i<=v;i++) for (j=1;j<=v;j++) g[i] [j]=0;

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

19

Representacin de grafos

LISTAS DE ADYACENCIA Es til cuando un grafo posee muchos nodos y pocas aristas (grafos no densos). En esta representacin se utiliza una lista enlazada o arreglo, la cual almacena los nodos N del grafo, sta se denomina directorio. Asociado a cada nodo del grafo se encuentra una lista enlazada con los nodos que son adyacentes a ste. Esta ltima lista representa los arcos o aristas del grafo.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

20

Representacin de grafos

LISTAS DE ADYACENCIA Un grafo no dirigido de orden N con A arcos requiere N entradas en el directorio y 2*A entradas de listas enlazadas, excepto si existen bucles que reduce el nmero de entradas a la lista en 1. Un grafo dirigido de orden N con A arcos requiere N entradas en el directorio y A entradas de listas enlazadas.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

21

Representacin de grafos

LISTAS DE ADYACENCIA

1 2 3 4

2 3 4 2

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

22

Representacin de grafos

LISTAS DE ADYACENCIA struct Nodo { TipoEle v; struct Nodo *sig;}; struct Nodo *ady[maxV], *z; z=new Nodo; z->sig=z; for (i=1; i<=v; i++) ady[i]=z;

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

23

Representacin de grafos

LISTAS DE ADYACENCIA for (i=1; i<=a; i++) { x=indice(v1); y=indice(v2); t=new Nodo; t->v=x; t->sig=ady[y]; ady[y]=t; t=new Nodo; t->v=y; t->sig=ady[x]; ady[x]=t;}
20/06/2001

// retorna e la posicion de v1 y v2 en el arreglo

Dulce Milagro Rivero A. Estructuras de datos

24

Estructuras no lineales:Recorridios de Grafos

Bsqueda en profundidad Mtodo para explorar cada nodo del grafo y de comprobar cada arista del grafo en forma sistemtica. Se utiliza un arreglo V para guardar el orden en el que se exploran los vrtices. Se inicia con el valor no visto.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

25

Estructuras no lineales:Recorridios de Grafos Recorrido en grafos * Permite visitar los vrtices y los nodos en forma sistemtica. * Es una generalizacin del recorrido en orden previo (preorden) de un rbol. Como funciona. * Se marcan los nodos como no visitados. * Se selecciona un vrtice v de G como punto de partida. * Se marca el vrtice v como visitado. * Se recorre cada vrtice adyacente a v no visitado, Usando recursivamente la bsqueda en profundidad.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 26

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad void buscar(){ int k; for (k=1; k<=N;k++) val[k] = novisto; for (k=1; k<=N;k++) if ( val[k] == novisto) visitar(k);} void visitar(int k){ struc Nodo *t; val [k] =++id; // valor que se asigna inicialmente en 1 for (t=ady [k] ; t!=z; t=t->sig) if (val[t->v] ==novisto)visitar(t->v);}
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 27

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

28

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

29

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

30

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

E F

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

31

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G E F

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

32

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G E F

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

33

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G E F

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

34

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G E F

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

35

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G D F E

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

36

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G D F E

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

37

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G D F E

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

38

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A G D F E

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

39

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A C D F E G

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

40

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A B D F C E G

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

41

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad

A B D F C E G

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

42

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad A F E G D C B

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

43

Estructuras no lineales:Recorridios de Grafos Bsqueda en profundidad La bsqueda en profundidad representada en una lista de adyacencia necesita tiempo proporcional a V+A La bsqueda en profundidad representada en una matriz de adyacencia necesita tiempo proporcional a V2

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

44

Recorridos de grafos

Recorrido en amplitud. Se utiliza una cola en lugar de una pila. Se evala primero los vrtices ms cercanos (Adyacentes). Se encolan (distancia actual +1) Al final se evalan los vrtices ms lejanos.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

45

Recorridos de grafos Queue<T> cola; void visitar(int k) // visita lista de adyacencia { struct nodo* t; cola.append(k); while (!cola.isempty()){ k=cola.pop(); val[k]=++id; for (t=ady[k]; t!=z; t=t->sig()){ if ( val[t->v] =novisitado){ cola.append(t->v); val[t->v] = -1;} }} }

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

46

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

47

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

F
Dulce Milagro Rivero A. Estructuras de datos 48

20/06/2001

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

A B

F B
Dulce Milagro Rivero A. Estructuras de datos 49

20/06/2001

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

A B C

F B C
Dulce Milagro Rivero A. Estructuras de datos 50

20/06/2001

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

A B C G

F B C G
Dulce Milagro Rivero A. Estructuras de datos 51

20/06/2001

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

A B C E F B C G E
Dulce Milagro Rivero A. Estructuras de datos 52

20/06/2001

Estructuras no lineales:Recorridios de Grafos Bsqueda en amplitud

A B D F C E B C G E D
Dulce Milagro Rivero A. Estructuras de datos 53

20/06/2001

Algoritmos de grafos

Ordenacin Topolgica: Ordenacin de los vrtices de un grafo dirigido acclico. (v,w) v esta antes que w. Buscar una arista con grado de incidencia de entrada=0. Se elimina este vrtice con sus aristas. Se sigue aplicando esta estrategia.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

54

Algoritmos de grafos

V1 V3 V6 V4

V2 V5 V7

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

55

Algoritmos de grafos Grados de entrada antes d desencolar Vrtice V1 V2 V3 V4 V5 V6 V7 Encolar Desencolar


20/06/2001

1 0 1 2 3 1 3 2 V1 V1

2 0 0 1 2 1 3 2 V2 V2

3 0 0 1 1 0 3 2 V5 V5

4 0 0 1 0 0 3 1 V4 V4

5 0 0 0 0 0 2 0 V3 V3

6 0 0 0 0 0 1 0 V7 V7

7 0 0 0 0 0 0 0 V6 V6
56

Dulce Milagro Rivero A. Estructuras de datos

Algoritmos de grafos

Void OrdenacinTopolgica() queue<TipoE> c; Contador=1; g.cursorAlInicio() for (i=1;i<=g.numEle();i++){ v=grafo.ConEleLista().TipoEle(); if (grdent[v]=0) c.append(v); cursorAlProximo();}

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

57

Algoritmos de grafos

while (c.isempty()==False) { v=c.pop(); num_top[v]=contador; contador=contador+1; buscarVertice(v); listad=g.conEleLista().ListaAdy(); listad.cursorAlInicio(); for (j=1;j<= listad.numEle();i++){ w=listad.conEleLista().TipoEle(); grdent[w]=grdent[w]-1; if (grdent[w]=0) c.append(w);} if (contador<= |V|) // nmero de vertices cout<< grafo tiene un ciclo
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 58

Algoritmos de grafos Grafos no dirigidos. Arboles abarcadores de costo mnimo (rbol de extensin o expansin mnima) Un rbol abarcador de un grafo no dirigido G es un rbol formado a partir de las aristas que conectan todos los vrtices de G con un costo total mnimo. * El nmero de aristas de un rbol de extensin mnima es |V| - 1. * Es un rbol porque es acclico. * Es de extensin porque cubre todas las arstas.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 59

Algoritmos de grafos

Algoritmo Prim (primera prioridad). El rbol crece en etapas sucesivas. En cada etapa se elige un nodo como raz y se agrega al rbol una arista (vrtice asociado). Es de orden O((A+V)Log V) En cada etapa el algoritmo encuentra un vrtice nuevo que agregar al rbol eligiendo la arista (u,v), de modo tal que el costo de (u,v) sea el menor de las aristas donde u esta en el rbol y v no. Se denomina primera prioridad por utilizar una cola de prioridad para decidir que vrtice seleccionar
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 60

Algoritmos de grafos Algoritmo Prim (primera prioridad).

V1 4 V3 5 V6 2 8 1

2 3 V4

V2 10 7 4 1 V7 6 V5

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

61

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 0 0 0 0 0 0 0

Costo 0

padre 0 0 0 0 0 0 0

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

62

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 0 0 0 0 0 0 0

Costo 0

padre 0 0 0 0 0 0 0

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

63

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 0 0 0 0 0 0

Costo 0 2 4 1

padre 0 V1 V1 V1 0 0 0

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

64

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 0 0 1 0 0 0

Costo 0 2 2 1 7 8 4

padre 0 V1 V4 V1 V4 V4 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

65

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 0 1 1 0 0 0

Costo 0 2 2 1 7 5 4

padre 0 V1 V4 V1 V4 V3 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

66

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 1 1 1 0 0 0

Costo 0 2 2 1 7 5 4

padre 0 V1 V4 V1 V4 V3 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

67

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 1 1 1 0 0 1

Costo 0 2 2 1 6 1 4

padre 0 V1 V4 V1 V7 V7 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

68

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 1 1 1 0 0 1

Costo 0 2 2 1 6 1 4

padre 0 V1 V4 V1 V7 V7 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

69

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 1 1 1 0 1 1

Costo 0 2 2 1 6 1 4

padre 0 V1 V4 V1 V7 V7 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

70

Algoritmos de grafos

v V1 V2 V3 V4 V5 V6 V7

Marca 1 1 1 1 1 1 1

Costo 0 2 2 1 6 1 4

padre 0 V1 V4 V1 V7 V7 V4

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

71

Algoritmos de grafos

Algoritmo Kruskal (1.956 port J. Kruskal) Consiste en aadir aristas, una a una, utilizando en cada paso la arista ms pequea que no forme ciclo. Es de orden O(AlogA) siendo A=nmero de aristas.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

72

Algoritmos de grafos Algoritmo Kruskal

V1 4 V3 5 V6 2 8 1

2 3 V4

V2 10 7 4 1 V7 6 V5

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

73

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre

1 2 3 4 5 6 7 1 2 3 4 5 6 7

Dulce Milagro Rivero A. Estructuras de datos

74

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre

1 2 3 4 5 6 7 1 2 3 4 5 6 7

Dulce Milagro Rivero A. Estructuras de datos

75

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A 1 2 3 4 5 6 7 1 2 3 1 5 6 7

Dulce Milagro Rivero A. Estructuras de datos

76

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A 1 2 3 4 5 6 7 1 2 3 1 5 6 7

Dulce Milagro Rivero A. Estructuras de datos

77

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A

1 2 3 4 5 6 7 1 2 3 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

78

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A

1 2 3 4 5 6 7 1 2 3 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

79

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A

1 2 3 4 5 6 7 1 2 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

80

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A

1 2 3 4 5 6 7 1 2 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

81

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A

1 2 3 4 5 6 7 1 1 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

82

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A

1 2 3 4 5 6 7 1 1 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

83

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R

1 2 3 4 5 6 7 1 1 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

84

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R

1 2 3 4 5 6 7 1 1 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

85

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R

1 2 3 4 5 6 7 1 1 1 1 5 6 6

Dulce Milagro Rivero A. Estructuras de datos

86

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R A

1 2 3 4 5 6 7 1 1 1 1 5 1 1

Dulce Milagro Rivero A. Estructuras de datos

87

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R A

1 2 3 4 5 6 7 1 1 1 1 5 1 1

Dulce Milagro Rivero A. Estructuras de datos

88

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R A R

1 2 3 4 5 6 7 1 1 1 1 5 1 1

Dulce Milagro Rivero A. Estructuras de datos

89

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R A R

1 2 3 4 5 6 7 1 1 1 1 5 1 1

Dulce Milagro Rivero A. Estructuras de datos

90

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5
20/06/2001

Costo 1 1 2 2 3 4 4 5 6 7 8 10

Padre A A A A R R A R A

1 2 3 4 5 6 7 1 1 1 1 1 1 1

Dulce Milagro Rivero A. Estructuras de datos

91

Algoritmos de grafos ARCOS V1-V4 V6-V7 V3-V4 V1-V2 V2-V4 V1-V3 V4-V7 V3-V6 V5-V7 V4-V5 V4-V6 V2-V5 Costo 1 1 2 2 3 4 4 5 6 7 8 10
Dulce Milagro Rivero A. Estructuras de datos

Padre A A A A R R A R A

Todos los nodos estan conectados


20/06/2001

92

Algoritmos de grafos

Algoritmo de Kruskal * Elige continuamente las aristas en orden ascendente por peso. * Se acepta una arista si no ocasiona un ciclo.

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

93

Algoritmos de grafos Kruskal // algoritmo Monticulo m; ConjuntoDisj c t=g.first() // mtodos de lista for (i=1;i<=g.numEle()-1;i++) { v=grafo.ConEleLista().TipoEle() listad=g.conEleLista().ListaAdy() listad.cursorAlInicio() for (j=1;j<=listad.numEle();j++){ w=listad.conEleLista().TipoEle() elemont.PesoM(w.Peso()) elemont.VerticU(y) elemont.VerticVy) m.insEleMont(elemont)} c.iniciar(y)}
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 94

Algoritmos de grafos Kruskal aristas_acp=o; while (aristas_acp <g.numEle()-1) { elemont=c.elimMin() conj_u = c.buscarDis(elemont.VertiU()) conj_v = c.buscarDis(elemont.VertiV()) Si (conj_u != conj_v) // escribir arista u,v aceptada. {Aristas_acp=aristas_acp+1 c.unionDis(conj_u,conj_v)} }

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

95

Algoritmos de grafos

Camino ms corto Es el camino que uno a dos nodos vi,vj con: * El menor nmero de aristas. (Longitud no ponderada del camino). * El camino de costo menor V1V2....Vn (Longitud ponderada del camino). ( ci,i+1).

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

96

Algoritmos de grafos Camino ms corto V1 4 V3 5 Por ejemplo: 2 2 1 V4 8 V6 1 4 V7 3 V2 2

10 V5 6

* El grafo es ponderado por lo que el camino ms corto tiene un costo de 6 y va de V1 a V4 a V7 a V6.


20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 97

Algoritmos de grafos Camino ms corto V1 V3 V6 Por ejemplo: V4 V7 V2 V5

* Grafo no ponderado el costo del camino ms corto sera 2 y va desde V1 a V4 a V6.


20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 98

Algoritmos de grafos Camino ms corto Camino ms corto no ponderado * Se establece un punto de entrada S. Encontrar el camino ms corto de S a los dems vrtices. * Solo interesa el nmero de aristas en el camino. * Se realiza bsqueda en amplitud. (similar al recorrido en niveles en los rboles).

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

99

Algoritmos de grafos Void CaminoCorto(TipoEle n){ aux1= conNodo(n) if ( aux1!=0 ) { aux=g.first (); for (i = 1; i<=g.Length();i++){ no = g.contend(aux); no.Distancia(MAXIMO); no.Padre(null); aux=g.succ();} no=g.contend(aux1); no.Distancia(0); colanodo.append(no);
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 100

Algoritmos de grafos Void CaminoCorto(TipoEle n){ while (colanodo.isempty() ) {no = colanodo.pop(); aux=no.ListaAdy().fisrt() for (i = 1; i<=no.ListaAdy().Length();i++){ aux1=conNodo(no.ListaAdy().contend(aux).Info() ); nady = g.contend(aux1); if (nady.Distancia() = MAXIMO) { nady.Distancia(no.Distancia() + 1); nady.Padre(no.Infor()); colanodo.append(nady);} no.ListaAdy().succ(aux);} }
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 101

Algoritmos de grafos Camino ms corto Camino ms corto grafos ponderado Algoritmo de Dijkstra. (30 aos) Es un algoritmo vido. Similar a los grafos no ponderados. Se marca el nodo como visitado. Y se guarda una distancia provisional. Algoritmo vido: resuelve los problemas por etapas, haciendo lo que parece ser mejor en cada etapa.
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 102

Algoritmos de grafos Void CaminoCorto(TipoEle n){ aux1= conNodo(n) if ( aux1!=0 ) { aux=g.first (); for (i = 1; i<=g.Length();i++){ no = g.contend(aux); no.Distancia(MAXIMO); no.Padre(null); aux=g.succ();} no=g.contend(aux1); no.Distancia(0); colanodo.append(no);
20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 103

Algoritmos de grafos while (colanodo.isempty() ) {no = colanodo.pop(); aux=no.ListaAdy().fisrt() for (i = 1; i<=no.ListaAdy().Length();i++){ aux1=conNodo(no.ListaAdy().contend(aux).Info() ); nady = g.contend(aux1); if (nady.Marca() = 0) {
nody.Info().Peso(no.Info().Peso() +no.ListaAdya().contend(aux).Info().Peso());

nady.Padre().Nom(no.Info().Nom()); ele.Nodo(nodaux.Info().Nom()); ele.Dis(no.Info().Peso() +no.ListaAdya().contend(aux).Info().Peso()); cola.append(ele); else


20/06/2001 Dulce Milagro Rivero A. Estructuras de datos 104

Algoritmos de grafos
if (no.Info().Peso()+no.ListaAdya().conLista().Info().Peso() < nodaux.Info().Peso() ) { ele.NNodo(nodaux..Info().Nom()); eleDis(nodaux.Info().Peso()); ele.Dis(no.Info().Peso() +no.ListaAdya().conLista().Info().Peso()); cola.append(ele); nady.Info().Peso(eleconj.Dis()); nady.Padre().Nom(no.Info().Nom()); } no.ListaAdy().succ(aux);} }}

20/06/2001

Dulce Milagro Rivero A. Estructuras de datos

105

También podría gustarte