Академический Документы
Профессиональный Документы
Культура Документы
Captulo 10
Grafos.
Los grafos enfatizan las relaciones complejas de conexin entre elementos de datos. Los rboles
son un caso simple de grafos.
Los grafos permiten estudiar problemas como: menor distancia o costo entre puntos; bsquedas
a travs de enlaces en la web; redes elctricas, cableado de impresos; itineracin de tareas,
siguiendo trayectorias; sintonizar o relacionar postulantes con ofertas, partes con proveedores;
conectividad entre pares de sitios en la red; especificacin de aplicaciones mostrando las
relaciones entre subsistemas; etc.
10.1. Definiciones.
Quedan definidos por un conjunto de vrtices V, ms un conjunto de elementos E que conectan
pares de vrtices distintos. El grafo se describe por: G(V, E).
elemento
Vrtices
adyacentes
vrtice
Elemento
incidente
en vrtice
20-01-2010
Densidad es el promedio de los grados de incidencia de los vrtices. Si sumamos los grados de
incidencia se tendr el valor 2E (se cuenta dos veces cada elemento). Entonces la densidad
resulta: 2E/V.
Se dice que un grafo es denso si su densidad en proporcional a V. Esto implica que el nmero
de elementos E ser proporcional a V2. En caso contrario es un grafo liviano (sparse).
El concepto de densidad tiene relacin con el tipo de algoritmo y la estructura de datos que se
emplear para representar el grafo. Complejidades tpicas son V2 y E*logE, la primera es ms
adecuada a grafos densos; y la segunda a grafos livianos.
Grafos dirigidos: Los elementos tienen asociada una direccin.
a
Elemento= (a, b)
Elemento= (b, a)
w(T )
w( E )
E T
10.2. Representaciones.
Para grafos densos se prefiere la matriz de adyacencias, para grafos livianos suele emplearse
una lista de adyacencias.
10.2.1. Matriz de adyacencia de los elementos en los vrtices.
Se emplea una matriz cuadrada (V-1, V-1) donde V es el nmero de vrtices.
20-01-2010
Grafos
3
a
0 1 .. w .. V-1
0
1
..
v
1
..
V-1
Figura 10.3. Matriz de adyacencias.
m[0][3]
m[1][0]
m[1][3]
Figura 10.5. Forma de almacenamiento de matrices.
ndice ms derechista vara ms rpido, si se accesa segn el orden de almacenamiento.
Se inicializan mediante listas:
int
m[2][4]={{0,1,2,3},{4,5,6,7}};
Profesor Leopoldo Silva Bijit
20-01-2010
20-01-2010
Grafos
G
V
E
adj
j
i
t[i][j] **(t+i+j)
t[i] *(t+i)
Figura 10.6. Estructura para matriz de adyacencias.
Tambin se puede definir una matriz esttica (sin llamar a malloc()) : como un arreglo de r
punteros que apuntan a arreglos con la informacin de las columnas.
10.2.4. Funciones para grafos descritos por su matriz de adyacencias.
La funcin creacin de un grafo vaco de V vrtices:
10.2.4.1. Creacin.
Graph GRAPHinit(int V)
{ Graph G = malloc(sizeof *G); //crea cabecera del grafo
G->V = V; G->E = 0;
//Con V vrtices y 0 elementos
G->adj = MATRIXint(V, V, 0);
//Lo inicia con ceros.
return G;
}
Donde MATRIXint crea la matriz de incidencias de r renglones, c columnas y la inicializa con
val.
//Asignacin dinmica de arreglo bidimensional
int **MATRIXint(int r, int c, int val)
{ int i, j;
int **t = malloc(r * sizeof(int *));
for (i = 0; i < r; i++)
t[i] = malloc(c * sizeof(int)); // t[i] equivale a *(t+i)
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
t[i][j] = val;
//equivale a **(t+i+j) = val;
return t;
Profesor Leopoldo Silva Bijit
20-01-2010
20-01-2010
Grafos
v w
1 2
1 4
2 3
3 4
4 0
3 0
20-01-2010
1
1
4
0
0
4
3
5
20-01-2010
Grafos
20-01-2010
10
1
3
1
0
0
1
2
3
4
0
0
0
0
1
1
1
0
0
1
0
1
2
0
1
0
1
0
3
1
0
1
0
1
4
1
1
0
1
0
2
4
5
0
elemento
0
1
2
3
4
5
v w
0 3
0 4
1 2
1 4
2 3
3 4
20-01-2010
Grafos
11
3
4
4
2
1
20-01-2010
12
20-01-2010
Grafos
13
indente--;
}
else putchar(' ');
}
}
}
Para el grafo del ejemplo de la figura 10.10., se produce el listado:
0-3
* 3-0
3-2
*
2-1
*
1-2
1-4
*
4-0
4-1
4-3
2-3
3-4
0-4
Este algoritmo puede emplearse: para detectar circuitos, para saber si existe una trayectoria que
conecte a dos vrtices dados, para determinar si es un grafo conectado, para encontrar un rbol.
Ver propiedades de los rboles dfs en Sedgewick 18.4.
10.3.1.4. Arreglo de padres.
La siguiente modificacin permite almacenar en el arreglo st el padre del vrtice w. Esa
informacin es til para aplicaciones de este algoritmo. Y es una forma de describir el rbol.
static int st[VERTICES];
void dfsR(Graph G, Edge e)
{ int t, j, w = e.w;
pre[w] = cnt++;
//Marca con contador creciente
st[e.w] = e.v; //Se guarda el padre de w.
for (t = 0; t < G->V; t++)
{
if (G->adj[w][t] != 0)
//Si hay conexin entre w y t
if (pre[t] == -1) dfsR(G, EDGE(w, t)); //Y t no est visitado busca t.
}
}
Para el ejemplo, quedaran almacenados en st: 0, 2, 3, 0, 1. Y en pre: 0, 3, 2, 1, 4.
El rbol que genera este algoritmo, se produce revisando los elementos en el siguiente orden:
20-01-2010
14
0-3 , *3-0 , 3-2, *2-1, *1-2, 1-4, *4-0, 4-1, 4-3, 2-3, 3-4, 0-4. Los que generan llamados
recursivos, se preceden con un asterisco. La ilustracin muestra que se avanza primero en
profundidad.
0
20-01-2010
Grafos
15
1
4
20-01-2010
16
A partir del nodo inicial 0, se marca el 0, y se exploran los elementos: 0-3 y 0-4. Se encolan el
0-3 y el 0-4. Ya que el 3 y 4 no han sido visitados an.
Se desencola el 0-3, se marca el 3, y se revisan el 3-0, el 3-2 y el 3-4. Se encolan el 3-2 y el 3-4.
Ya que el 2 y el 4 no han sido visitados an.
Se desencola el 0-4, se marca el 4, y se revisan el 4-0, 4-1 y 4-3. Se encola el 4-1.
Se desencola el 3-2, se marca el 2, y se revisan el 2-1, 2-3. Se encola el 2-1.
Se desencola el 3-4 sin procesar.
Se desencola el 4-1, se marca el 1, y se revisan el 1-2 y 1-4.
Se desencola el 2-1 sin procesar.
Del rbol formado, se visualiza, que el vrtice 0 est a distancia uno de los vrtices 3 y 4, y que
est a distancia 2, de los vrtices 1 y 2.
Los vrtices se marcan en el siguiente orden: 0, 3, 4, 2, 1.
0
20-01-2010
Grafos
17
cnt = 0;
QUEUEinit(ELEMENTOS);
for (v = 0; v < G->V; v++) {pre[v] = -1; st[v]=-1;} //Inicio de estructuras
for (v = 0; v < G->V; v++)
if (pre[v] == -1)
bfs(G, EDGE(v, v));
QUEUEdestroy();
20-01-2010
18
20-01-2010
Grafos
19
* ");
20-01-2010
20
La descripcin del grafo, descrito por sus elementos, segn la lista de vrtices adyacentes
resulta:
8 vrtices, 12 elementos
0: 0.32 0.29 0.59 0.51 0.31
1: 0.32 0.21
2: 0.29
3: 0.34 0.18
4: 0.34 0.40 0.52 0.46
5: 0.59 0.18 0.40
6: 0.51 0.52 0.25
7: 0.31 0.21 0.46 0.25
La matriz de adyacencias con los pesos, resulta:
0
1
2
3
4
5
6
7
0: * 0.32 0.29 *
* 0.59 0.51 0.31
1: 0.32 *
*
*
*
*
* 0.21
2: 0.29 *
*
*
*
*
*
*
3: *
*
*
* 0.34 0.18 *
*
4: *
*
* 0.34 * 0.40 0.52 0.46
5: 0.59 *
* 0.18 0.40 *
*
*
6: 0.51 *
*
* 0.52 *
* 0.25
7: 0.31 0.21 *
* 0.46 * 0.25 *
El siguiente ejemplo muestra las modificaciones a la generacin de un rbol, empleando
bsqueda primero en profundidad. Se agrega el vector wt con los pesos.
static int cnt;
static int pre[VERTICES];
static int st[VERTICES];
static float wt[VERTICES];
void dfsR(Graph G, Edge e)
{ int t;
pre[e.w] = cnt++;
st[e.w] = e.v;
//se guarda el vrtice v padre de w.
wt[e.w]=G->adj[e.w][e.v]; //se guarda el peso del elemento w-v
for (t = 0; t < G->V; t++)
{
if (G->adj[e.w][t] != maxWT)
if (pre[t] == -1)
{dfsR(G, EDGE(e.w, t, maxWT)); /*printf("%d-%d \n", e.w, t);*/}
}
}
20-01-2010
Grafos
21
void GRAPHsearchDFS(Graph G)
{ int v;
cnt = 0;
for (v = 0; v < G->V; v++) {pre[v] = -1; st[v] = -1;} //Inicializacin
for (v = 0; v < G->V; v++)
if (pre[v] == -1)
dfsR(G, EDGE(v, v, maxWT));
}
La cual entrega en st la descripcin del rbol a partir de un arreglo de padres de los vrtices.
0
1
2
3
4
5
6
7 Vrtices.
0
0
0
4
7
3
4
1 Padre del vrtice.
1.0 0.32 0.29 0.34 0.46 0.18 0.52 0.21 Peso del elemento entre vrtice y su Padre.
La raz del rbol (vrtice 0) tiene un lazo de peso infinito (valor 1.0) consigo misma.
Este rbol cubre todos los nodos, pero no es un rbol de cobertura mnima.
20-01-2010
22
MST
20-01-2010
Grafos
23
#define NoVisitado -1
#define SinPadre -1
#define Peso G->adj[v][w]
void mstPrim(Graph G, int raiz)
{ //Inicio del espacio de variables
int v, w, min=raiz, cnt;
for (v = 0; v < G->V; v++)
{ padre[v] = SinPadre; DistaMenosDe[v] = v; wt[v] = maxWT; }
wt[G->V] = maxWT; //centinela. Arreglo requiere una posicin adicional
wt[raiz]=0.; //raz a distancia cero de s misma.
for (cnt=0; cnt< G->V; cnt++) //agrega todos los vertices O(V2)
{
v = min; padre[v] = DistaMenosDe[v]; //agrega vrtice v al MST
//printf(" %d \n", v); //orden en que son agregados los vrtices.
//Selecciona vrtice min con distancia mnima a los vrtices del mst
for (w = 0, min = G->V; w < G->V; w++)
//Al inicio min es un vrtice que no existe.
if (padre[w] == NoVisitado) //si w no est an en el MST
{
if (Peso < wt[w])
{ wt[w] = Peso; DistaMenosDe[w] = v; } //salva distancia menor y el vrtice.
if (wt[w] < wt[min]) min = w; //selecciona nuevo vrtice a distancia mnima
}
//Al salir del for interno se tiene el nuevo vrtice que se agrega al MST
}
}
Para los datos anteriores, luego de ejecutado el Algoritmo de Prim, con raz en vrtice 0, se
genera:
0
1
2
3
4
5
6
7 Vrtices.
0
7
0
4
7
3
7
0 Padre del vrtice.
0 0.21 0.29 0.34 0.46 0.18 0.25 0.31 Peso elemento entre vrtice y su Padre.
0
7
0
4
7
3
7
0 Vrtice que dista menos del vrtice del rbol
La suma = 0.21+0.29+0.34+0.46+0.18+0.25+0.31 es la mnima.
10.5.2. Algoritmo de Kruskal.
Se inicia con un conjunto vaco los vrtices del rbol de mnima cobertura. Luego de ordenados
los elementos por sus pesos, se agrega un elemento por vez, los de menor peso se intentan
agregar primero. Antes de agregar los vrtices del elemento al rbol, se revisa que no se formen
circuitos. El procedimiento termina cuando se tengan todos los vrtices en el conjunto o se
hayan agregado (Vrtices-1) ramas al rbol.
Profesor Leopoldo Silva Bijit
20-01-2010
24
Verificar que los vrtices agregados, asociados a un elemento, no formen circuitos no es una
tarea sencilla. Una primera aproximacin es definir un arreglo id de vrtices que mantenga la
informacin booleana de si un vrtice ha sido agregado o no.
La Figura 10.15, muestra las ramas, definidas por sus vrtices: (1, 4), (1, 5) y (0, 3), que ya han
sido agregadas al rbol. Al inicio se marcan todos los vrtices con 0, indicando que an no han
sido considerados. Entonces si el and de id[v] e id[w] es verdadero no se agrega el elemento
(u,w) y se considera el siguiente elemento de mayor peso; si es falso se marcan los vrtices con
1, indicando su consideracin.
Los vrtices: 2 y 6 an no han sido agregados, y los elementos considerados forman una foresta
o un conjunto de subrboles no conectados entre s.
1
0
0
1
1
1
2
0
3
1
4
1
5
1
6
0
foresta
0 1 2
0 7 2
3
3
4
7
5
5
6
6
20-01-2010
Grafos
25
1
foresta
0 1 2
0 7 2
3
3
4
7
5
7
6
6
4
0
foresta
0 1 2
8 7 2
3
8
4
7
5
7
6
6
4
0
foresta
0 1 2
7 7 2
3
7
4
7
5
7
6
6
20-01-2010
26
}
int NoPertenece(int p, int q)
{
return (foresta[p] != foresta[q]);
}
void mstKruskal(Graph G, Edge *e)
{
int i, k, E;
E=GRAPHedges(e, G);
qsortnw(e, 0, E-1); //ordena elementos por pesos.
for(i=0; i<G->V; i++) foresta[i]=i; //crea conjunto de vrtices.
cntf=G->V;
for (i= 0, k = 0; i < E && k < G->V-1; i++)
if (NoPertenece( e[i].v, e[i].w )) //Elemento (u,w) no pertenece al mst
{
UneSubArboles(e[i].v, e[i].w); //La unin es O(n)
mst[k++] = e[i]; //agrega rama al rbol
}
}
En el arreglo mst de elementos, se deja el rbol, se emplea como variable global.
Edge mst[VERTICES-1];
La rutina de ordenamiento quicksort, se modifica, para adecuarla a los tipos de datos del grafo,
y para ordenar segn el peso:
void qsortnw(Edge *a, int l, int r)
{
int i=l, j=r;
Edge temp;
float piv=a[(l+r)/2].wt;
do {
while ( a[i].wt < piv) i++;
while( piv < a[j].wt) j--;
if( i<=j)
{ if (i!=j) {temp=a[i], a[i]= a[j], a[j]=temp;}
i++; j--;
}
} while(i<=j);
if( l < j) qsortnw( a, l, j);
if( i < r ) qsortnw( a, i, r);
}
La siguiente secuencia prueba la funcin, e imprime el mnimo rbol de cobertura:
20-01-2010
Grafos
27
mstKruskal(Grafo, Elementos);
for (i = 0; i < Grafo->V-1; i++)
printf("%2d-%2d =%0.2f\n", mst[i].v, mst[i]. w, mst[i].wt);
Las funciones que manejan conjuntos, se encuentra en las primeras pginas del texto de R.
Sedgewick.
void GRAPHmstKruskal(Graph G, Edge *e)
{
int i, k, E;
E=GRAPHedges(e, G);
//Se crea representacin de elementos a partir del grafo.
qsortnw(e, 0, E-1);
//se ordena a los elementos, segn el peso.
UFinit(G->V);
//crea conjunto de vrtices.
for (i= 0, k = 0; i < E && k < G->V-1; i++) //se agregan mximo V-1 ramas
if (!UFfind(e[i].v, e[i].w)) //si v no est conectado a w
{
UFunion(e[i].v, e[i].w); //se agregan vrtices al conjunto
mst[k++] = e[i];
//se agrega rama e al rbol mst
}
UFdestroy();
}
En el arreglo id, se identifican los vrtices de un grafo
Se lleva la cuenta del nmero de nodos de cada subconjunto en sz.
static int *id, *sz;
void UFinit(int N)
{ int i;
id = (int *) malloc(N*sizeof(int));
sz = (int *) malloc(N*sizeof(int));
for (i = 0; i < N; i++)
{ id[i] = i; sz[i] = 1; }
}
id
sz
0
1
1
1
N-1
20-01-2010
28
20-01-2010
Grafos
29
Existen tres tipos de problemas. Uno de ellos es: dados dos vrtices encontrar la trayectoria
orientada ms corta entre los vrtices, se lo denomina fuente-sumidero. Otro caso: es encontrar
todos los trayectos ms cortos entre un vrtice y todos los dems; esto equivale a encontrar un
rbol (SPT shortest-path-tree) que conecte al vrtice con todos los dems vrtices que son
alcanzables, de tal modo que la trayectoria en el rbol sea la ms corta dentro de la red. Un
tercer problema es encontrar todos los pares de rutas ms cortas.
10.5.1. Modificacin de las funciones para tratar grafos orientados con pesos.
La definicin del elemento debe entenderse como dirigido de v hacia w.
Edge EDGE(int v, int w, float wt)
{ Edge t;
t.v=v; t.w=w; t.wt=wt;
return (t);
}
w
wt
20-01-2010
30
return G;
}
void GRAPHinsertE(Graph G, Edge e) //Inserta elemento
{
if (G->adj[e.v][e.w] == maxWT) G->E++;
G->adj[e.v][e.w] = e.wt; // Slo el elemento dirigido.
}
void GRAPHremoveE(Graph G, Edge e)
{
if (G->adj[e.v][e.w] != maxWT) G->E--;
G->adj[e.v][e.w] = maxWT;
}
//Remueve elemento
20-01-2010
* ");
Grafos
31
}
Las siguientes definiciones, permiten crear un grafo de seis vrtices y 11 elementos.
#define VERTICES 6
#define ELEMENTOS 11
//Variables
Graph Grafo;
Edge Elementos[ELEMENTOS]={{0,1,.41},{1,2,.51},{2,3,.50},{4,3,.36},\
{3,5,.38},{3,0,.45},{0,5,.29},{5,4,.21},\
{1,4,.32},{4,2,.32},{5,1,.29} };
Se inicia el grafo con:
Grafo = GRAPHinit(VERTICES);
Y la insercin de los elementos con sus pesos se logra con:
for(i=0; i<ELEMENTOS; i++)
GRAPHinsertE(Grafo, Elementos[i] );
La lista de los vrtices conectados a cada vrtice se logra con:
GRAPHshowL(Grafo);
La cual muestra:
0: 0-0.00 1-0.41
1: 1-0.00 2-0.51
2: 2-0.00 3-0.50
3: 0-0.45 3-0.00
4: 2-0.32 3-0.36
5: 1-0.29 4-0.21
5-0.29
4-0.32
5-0.38
4-0.00
5-0.00
20-01-2010
32
0.41
0.29
0.29
5
0.45
0.32 0.51
0.21
0.38 0.36
0.32
4
0.50
20-01-2010
Grafos
33
0
1
2
3
4
5 Vrtices.
0
0
1
2
5
3 Padre del vrtice.
0.00 0.41 0.92 1.42 2.01 1.80 Peso trayecto entre vrtice y la raz.
0
1
2
3
5
4 Orden en que visita los vrtices.
El rbol DFS generado no es un SPT mnimo.
0
0.41
0.29
5
0.51
0.38
0.29
5
0.21
0.41
0.45
0.38 0.36
4
0.50
0.32 0.51
0.21
0.32
4
0.50
3
4 5
2
1 0
1.42 0.73 0.29
5
4 2
Vrtices.
Padre del vrtice.
Peso trayecto entre vrtice y la raz.
Orden en que visita los vrtices.
0.41
0.29
0.29
0.32 0.51
0.29
5
0.45
2
0.32 0.51
0.21
0.38 0.36
4
0.50
0.41
0.32
4
0.50
20-01-2010
34
Se implementa una solucin similar al algoritmo de Prim, pero se van agregando vrtices que
estn a la menor distancia de la raz.
Escoger raz.
Repetir hasta agregar todos los vrtices:
Encontrar un nodo (sea min) cuya distancia a la raz sea la menor entre todos los nodos no
pertenecientes al SPT.
Marcar ese nodo (sea v) como perteneciente al SPT.
Repetir para cada w nodo no perteneciente al SPT:
Si hay conexin entre v y w, y si la distancia del nodo raz a v ms la distancia
de v a w es menor que la distancia actual de la raz a w:
Actualizar la distancia de la raz a w como la distancia de la raz a v ms
la distancia de v a w.
Actualizar el nuevo padre de w
Actualizar el vrtice que est a distancia mnima.
raz
wt[v]
wt[w]
v
20-01-2010
Grafos
35
20-01-2010
36
1
0.29
5
0.45
0.21
0.38
4
0.50
0.41
0.29
0.29
5
0.45
0.32 0.51
0.21
0.38 0.36
0.32
4
0.50
Vrtices.
Padre del vrtice.
Peso trayecto entre vrtice y raz.
Vrtices.
Padre del vrtice.
Peso trayecto entre vrtice y raz.
20-01-2010
Grafos
37
Referencias.
Robert Sedgewick, "Algorithms in C", Third edition, Addison Wesley, 1998.
20-01-2010
38
Problemas resueltos.
P10.1. Para el siguiente grafo orientado:
1
0,4
0,1
0,3
0,5
0,5
0,3
0,5
Determinar el arreglo de pesos del trayecto de peso mnimo entre cada vrtice y la raz, y el
arreglo padres del vrtice.
a) Para raz igual al vrtice 4.
b) Para raz igual al vrtice 2.
Solucin:
a)
0
1
2
3
4
4
0
3
4
4
0.30 0.70 1.00 0.50 0.00
Vrtices.
Padre del vrtice.
Peso trayecto entre vrtice y raz.
b)
0
1
2
3
4
4
2
2
1
1
0.90 0.50 0.00 0.80 0.60
Vrtices.
Padre del vrtice.
Peso trayecto entre vrtice y raz.
20-01-2010
Grafos
39
a)
1
0,4
0,1
0,5
0,3
0,5
0,3
0,5
3
2
b) Se eligen en el orden:
1- 4 =0.10
1- 3 =0.30
0- 4 =0.30
2- 3 =0.50
1
0,1
0,3
0,5
0,3
3
c)
Se agregan en orden: 0, 4, 1, 3, 2.
0
1
2
3
4
Vrtices.
0
4
1
1
0
Padre del vrtice.
1.00 0.10 0.50 0.30 0.30
Peso elemento entre vrtice y su Padre.
2
1
0,1
0,3
0,5
0,3
20-01-2010
40
18
10
H
3
J
5
E
22
B 14
22
17
9 13
F
G
13
20-01-2010
Grafos
41
ndice general.
CAPTULO 10 ........................................................................................................................................... 1
GRAFOS. .................................................................................................................................................... 1
10.1. DEFINICIONES. ................................................................................................................................. 1
10.2. REPRESENTACIONES. ....................................................................................................................... 2
10.2.1. Matriz de adyacencia de los elementos en los vrtices. .......................................................... 2
10.2.2. Matrices estticas en C. .......................................................................................................... 3
10.2.3. Matrices dinmicas en C. ........................................................................................................ 4
Declaracin de estructuras de datos para un grafo. .......................................................................................... 4
Definicin de variables. ................................................................................................................................... 4
20-01-2010
42
20-01-2010
Grafos
43
ndice de figuras.
FIGURA 10.1. ELEMENTO, VRTICE, INCIDENCIA........................................................................................... 1
FIGURA 10.2. ELEMENTOS ORIENTADOS. ...................................................................................................... 2
FIGURA 10.3. MATRIZ DE ADYACENCIAS. ..................................................................................................... 3
FIGURA 10.4. MATRIZ DE 2 RENGLONES POR 4 COLUMNAS. .......................................................................... 3
FIGURA 10.5. FORMA DE ALMACENAMIENTO DE MATRICES. ......................................................................... 3
FIGURA 10.6. ESTRUCTURA PARA MATRIZ DE ADYACENCIAS. ...................................................................... 5
FIGURA 10.7. GRAFO DESCRITO POR SUS ELEMENTOS. .................................................................................. 7
FIGURA 10.8. GRAFO PARA ELEMENTOS DE LA FIGURA 10.7. ........................................................................ 8
FIGURA 10.9. GENERACIN DE LOS ELEMENTOS A PARTIR DE MATRIZ DE ADYACENCIAS. .......................... 10
FIGURA 10.10. ORDEN DE VISITAS, GENERACIN DE LLAMADOS. ............................................................... 11
FIGURA 10.11. VISUALIZACIN DE LOS LLAMADOS, EN PROFUNDIDAD....................................................... 14
FIGURA 10.12. EJEMPLO PARA BSQUEDA PRIMERO EN EXTENSIN. .......................................................... 15
FIGURA 10.13. ORDEN DE VISITAS, GENERACIN DE LLAMADOS. EN EXTENSIN. ...................................... 16
FIGURA 10.14. CONJUNTOS EN EL ALGORITMO DE PRIM. ............................................................................ 22
FIGURA 10.15. GENERACIN MST. ALGORITMO DE KRUSKAL. .................................................................. 24
FIGURA 10.15A. CREACIN DE PRIMER RBOL DE LA FORESTA. ................................................................. 24
FIGURA 10.15B. AGREGA ELEMENTO A SUBRBOL DE LA FORESTA. ........................................................... 25
FIGURA 10.15C. AGREGA ELEMENTO A SUBRBOL DE LA FORESTA. ........................................................... 25
FIGURA 10.15D. UNIN DE SUBRBOLES DE LA FORESTA. .......................................................................... 25
FIGURA 10.16. DESCRIPCIN DE CONJUNTOS, MEDIANTE ARREGLOS. ......................................................... 27
FIGURA 10.17. ELEMENTO ORIENTADO, CON PESO...................................................................................... 29
FIGURA 10.18. GRAFO ORIENTADO. ............................................................................................................ 32
FIGURA 10.19. RBOL DE TRAYECTORIAS DFS. ......................................................................................... 33
FIGURA 10.19A. RBOL DE TRAYECTORIAS BFS. ....................................................................................... 33
FIGURA 10.20. DISTANCIAS EN ALGORITMO DE DIJKSTRA. ......................................................................... 34
FIGURA 10.21. SPT, RAZ 2. ........................................................................................................................ 36
FIGURA 10.22. SPT, RAZ 0. ........................................................................................................................ 36
20-01-2010