Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
20/06/2001
20/06/2001
a d
b f Grafo no dirigido
c g
20/06/2001
20/06/2001
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
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
20/06/2001
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
10
M=
20/06/2001
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
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
14
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
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
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
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
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
21
Representacin de grafos
LISTAS DE ADYACENCIA
1 2 3 4
2 3 4 2
20/06/2001
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
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
24
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
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
20/06/2001
28
20/06/2001
29
20/06/2001
30
E F
20/06/2001
31
A G E F
20/06/2001
32
A G E F
20/06/2001
33
A G E F
20/06/2001
34
A G E F
20/06/2001
35
A G D F E
20/06/2001
36
A G D F E
20/06/2001
37
A G D F E
20/06/2001
38
A G D F E
20/06/2001
39
A C D F E G
20/06/2001
40
A B D F C E G
20/06/2001
41
A B D F C E G
20/06/2001
42
20/06/2001
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
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
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
46
20/06/2001
47
F
Dulce Milagro Rivero A. Estructuras de datos 48
20/06/2001
A B
F B
Dulce Milagro Rivero A. Estructuras de datos 49
20/06/2001
A B C
F B C
Dulce Milagro Rivero A. Estructuras de datos 50
20/06/2001
A B C G
F B C G
Dulce Milagro Rivero A. Estructuras de datos 51
20/06/2001
A B C E F B C G E
Dulce Milagro Rivero A. Estructuras de datos 52
20/06/2001
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
54
Algoritmos de grafos
V1 V3 V6 V4
V2 V5 V7
20/06/2001
55
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
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
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
V1 4 V3 5 V6 2 8 1
2 3 V4
V2 10 7 4 1 V7 6 V5
20/06/2001
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
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
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
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
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
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
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
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
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
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
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
72
V1 4 V3 5 V6 2 8 1
2 3 V4
V2 10 7 4 1 V7 6 V5
20/06/2001
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
96
10 V5 6
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
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());
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
105