2 Redes Valoradas
2 Redes Valoradas
2 Redes Valoradas
Excluida la raíz, con los demás vértices se pueden formar subconjuntos disjuntos, cada uno de los
cuales es a su vez un árbol.
Todo par de vértices está unido mediante una sola cadena.
Un grafo es un árbol ⇔ Existe un único camino simple entre todo par de vértices
Un árbol se dice binario si todos sus nodos, excepto las hojas, tienen dos sucesores inmediatos.
Un árbol generador de una red (o grafo) conexa y sin bucles es una red parcial de la inicial que tiene
estructura de árbol.
Si una red conexa y sin bucles está valorada es un árbol mínimo (respectivamente, máximo) a un
árbol generador para el cual la suma de los valores asociados a los arcos seleccionados es mínima
(respectivamente, máxima)
Árbol maximal o generador de un grafo G conexo es un subconjunto máximal de G que también sea
un árbol.
Un árbol maximal de G contiene todos los vértices V de G
Un conjunto de árboles recibe el nombre de bosque. Un árbol formado por un solo vértice y sin
lados, se llama árbol degenerado.
Un dígrafo se denomina árbol dirigido cuando su grafo asociado es un árbol.
Teoremas relativos a la caracterización de Árboles:
Los problemas de redes surgen en una gran variedad de situaciones, redes de transporte, eléctricas
y de comunicaciones predominan en la vida.
TERMINOLOGÍA DE REDES
Una red es un conjunto de puntos y un conjunto de líneas que unen pares de puntos.
Los puntos se llaman nodos (o vértices).
Las líneas se llaman arcos (o ligaduras, aristas o ramas). Los arcos se etiquetan al dar el nombre de
los nodos en sus puntos terminales, en esta línea AB es el arco entre los nodos A y B. Los arcos de
una red pueden tener un flujo de algún tipo que pase por ellos.
Cuando el flujo a través de un arco se permite solo en una dirección (como en una calle de un
sentido) se denomina arco es dirigido, una forma de etiquetarlo es A → B.
Si el flujo a través de un arco se permite en ambas direcciones se dice que es un arco no dirigido,
con frecuencia se les denomina ligadura.
Una red que tiene sol arcos dirigidos se llama red dirigida, si tiene solo arcos no dirigidos se dice que
es una red no dirigida. Una red con mezcla de arcos no dirigidos y dirigidos (incluso con todos sus
arcos no dirigidos) se puede convertir en una red dirigida mediante la sustitución de cada arco no
dirigido por un par de arcos dirigidos en direcciones opuestas. Después, según convenga, se puede
proporcionar un flujo neto en una sola dirección o interpretar los flujos a través de cada para de
arcos dirigidos como flujos simultáneos en direcciones opuestas.
En el proceso de toma de decisiones sobre el flujo de un arco no dirigido se permite hacer una
secuencia de asignaciones de flujos en direcciones opuestas, entendiendo que el flujo real será el
flujo neto, esto es, la diferencia de los flujos asignados en las dos direcciones.
Sea un ejemplo, se asigna un flujo de 10 en una dirección y después un flujo 4 en la dirección
opuesta, el efecto real es la cancelación de 4 unidades de asignación original, lo que reduce el flujo
en la dirección original de 10 a 6.
En arcos dirigidos en ocasiones se utiliza la misma técnica como una forma de reducir un flujo
asignado con anterioridad.
En particular, se puede hacer una asignación ficticia de flujo en la dirección equivocada a través de
un arco dirigido para registrar una reducción en esa cantidad del flujo que va en dirección correcta.
El camino más corto entre los vértices v1 y v 3 es C 3 con una distancia total de 5
El conjunto de caminos mínimos desde un vértice v a los restantes vértices de un grafo es un árbol,
llamado árbol de caminos mínimos desde v.
Uno de los algoritmos más utilizados para la búsqueda de caminos de peso mínimo es el de Dijkstra,
que proporciona los pesos mínimos desde un vértice dado al resto de los vértices.
Con el algoritmo de Dijkstra se pueden resolver grafos con muchos vértices, que sería muy
complicado resolver con otros algoritmos, por lo que tiene una aplicación importante en tecnología
y comunicaciones.
El conjunto de caminos mínimos siempre es un árbol generador.
El algoritmo de Dijkstra devuelve el peso mínimo no el camino mínimo. Por lo que en general, el
árbol obtenido no tiene por qué ser mínimo.
A continuación se resuelve el problema de encontrar el camino de longitud mínima entre dos
vértices de un grafo ponderado no dirigido si todos los pesos no son negativos. El Algoritmo puede
adaptarse para resolver problemas de longitud mínima entre grafos dirigidos.
A B C D E T Vértice Arista
0• ∞ ∞ ∞ ∞ ∞ A
A B C D E T Vértice Arista
• ∞ ∞ ∞ ∞ ∞ A
0
12• ∞ 14 ∞ ∞ B AB
El vértice con menor etiqueta, en este caso B se marca, se añade al árbol de caminos mínimos y se
incorpora la arista AB .
Se toman todas las aristas Bv, con el resto de vértices v no pertenecientes al árbol y se actualizan las
etiquetas de los vértices adyacentes de B, como antes, mín ⎡⎣ t(v) , t(B) + p(Bv) ⎤⎦ , resultando:
En la tabla aparece una nueva fila con las etiquetas, añadiendo la etiqueta mínima D y la arista AD .
A B C D E T Vértice Arista
0• ∞ ∞ ∞ ∞ ∞ A
12• ∞ 14 ∞ ∞ B AB
19 14 • 23 35 D AD
Ahora se observan los vértices adyacentes a D que no están en el árbol y se actualizan las etiquetas.
A B C D E T Vértice Arista
• ∞ ∞ ∞ ∞ ∞ A
0
12• ∞ 14 ∞ ∞ B AB
19 14 • 23 35 D AD
19• 20 35 C BC
De otra parte, para saber cuál es el vértice vecino a C en el árbol, se sube por la columna de C hasta
encontrar la primera variación en las etiquetas.
La primera variación que se encuentra es el salto de 19 a ∞ , que se produce en la fila donde está 12• ,
en consecuencia, es el vértice B
A B C D E T Vértice Arista
• ∞ ∞ ∞ ∞ ∞ A
0
12• ∞ 14 ∞ ∞ B AB
19 14 • 23 35 D AD
19• 20 35 C BC
Los vértices adyacentes al vértice C son los vértices E y T.
Se actualizan las etiquetas de los vértices adyacentes de C: mín ⎡⎣ t(v) , t(C) + p(Cv) ⎤⎦ , resultando:
A B C D E T Vértice Arista
• ∞ ∞ ∞ ∞ ∞ A
0
12• ∞ 14 ∞ ∞ B AB
19 14 • 23 35 D AD
19• 20 35 C BC
20 • 29 E DE
El vértice vecino a E en el árbol se encuentra al subir por la columna E hasta encontrar la primera
variación en las etiquetas, el vértice marcado es 14 • , con lo que es el vértice D, la ruta DE tiene una
longitud 20 − 14 = 6
Continúa el algoritmo, desde el vértice E sólo queda un vértice adyacente, T. Se actualiza la
etiqueta: mín ⎡⎣ t(T) , t(E) + p(E T) ⎤⎦
A B C D E T Vértice Arista
• ∞ ∞ ∞ ∞ ∞ A
0
12• ∞ 14 ∞ ∞ B AB
19 14 • 23 35 D AD
19• 20 35 C BC
20 • 29 E DE
29 • T CT
Para hallar las rutas más cortas desde el vértice A a los restantes vértices no es necesario
representar el grafo, basta con los datos de la tabla:
A B C D E T
• ∞ ∞ ∞ ∞ ∞
0
12• ∞ 14 ∞ ∞
19 14 • 23 35
19• 20 35
20 • 29
29 •
Encontrar la ruta más corta desde el vértice A hasta cada uno de los restantes vértices del grafo.
B C D E F G
A 5 6
B 5 6 7
C 2
D 5 9
E 7
F 9
Se elige el nodo D
Vértice D ruta AD Longitud: 6
Se elige el nodo C
Vértice C ruta ABC Longitud: 10
Se elige el nodo E
Vértice E ruta ABE Longitud: 11
Se elige el nodo F
Vértice F ruta ADF Longitud: 11
B C D E F G
A 5 6
B 5 6 7
C 2
D 5 9
E 7
F 9
El algoritmo atribuye a cada vértice v una etiqueta t(v) , que es la longitud del camino ya
seleccionado. Se inicia la tabla con t(A) = 0 , t(v) = ∞ ∀ v ≠ A
A B C D E F G Vértice Arista
∞ ∞ ∞ ∞ ∞ ∞ A
•
5 ∞ 6 ∞ ∞ ∞ B AB
•
10 6 11 ∞ 12 D AD
•
10 11 11 12 C BC
•
11 11 12 E BE
•
11 12 F DF
•
12 G CG
Aparece una nueva fila: Se marca el vértice D con menor etiqueta (6) y se marca la arista AD , que
se incorpora al árbol de caminos mínimos.
Se toman todas las aristas B v, con el resto de vértices v no pertenecientes al árbol y se actualizan
etiquetas de los vértices adyacentes a B: mín ⎡⎣ t(v) , t(B) + p(B v) ⎤⎦
Aparece una nueva fila: Se marca el vértice C que tiene menor etiqueta (10) y se marca la arista
BC , que se incorpora al árbol.
Se actualizan las etiquetas de los vértices adyacentes a D: mín ⎡⎣ t(v) , t(D) + p(D v) ⎤⎦
Aparece una nueva fila: Se marca el vértice E que tiene menor etiqueta (11) y se marca la arista
BE y se incorpora al árbol.
DIJKSTRA ‐ RUTA MÁS CORTA: WinQSB / Network Modeling ‐ Shortest Path Problem
Vértice B
Ruta ADCB
Longitud: 11
Vértice F
Ruta ADCBF
Longitud: 15
Vértice E
Ruta ADCBFE
Longitud: 18
Vértice H
Ruta ADCBFEH
Longitud: 23
Aplicando el algoritmo de Dijkstra para hallar el camino mínimo desde el vértice A a todos los
demás, excluido B que no conecta con A
Por tanto, el coche comprado en el segundo semestre del año 2020, se cambia en el primer
semestre del año 2022 y se mantiene el segundo semestre del año 2023.
⎧ C ≡ Capacidad
⎪ i j ≡ Índices de los nodos
⎪
C i j , ji = (C i − k , C j + k) ⎨
⎪ k ≡ Mínimo flujo que pasa por el nodo
⎪⎩ k = mín(capacidades de la ruta)
El Flujo Máximo que puede pasar del nodo origen hasta el nodo destino es la suma de las capacidades
∑ k de la ruta.
Muchos problemas pueden ser modelados mediante una red en donde los arcos limitan la cantidad
de un producto que se puede enviar. En estas situaciones, frecuentemente se transporta la máxima
cantidad de flujo desde un punto de partida llamado fuente hacia un punto final denominado pozo.
La red esta formada por 5 nodos, 7 aristas y una función capacidad. Se comienza poniendo todos los
flujos a 0.
Solución:
El algoritmo ha finalizado porque desde Madrid todos los aviones salen con capacidad 0.
El Flujo Máximo total de vuelos es 55.
Función Objetivo: Maximizar las unidades que salen del nodo de origen (1) a los nodos que esta
conectada (2, 4 y 5) o alternativamente maximizar las unidades que llegan al nodo de destino (8) desde
los nodos que conectan a él (3, 6 y 7).
Restricciones:
Flujo Máximo: La cantidad de unidades que sale de cada nodo de origen a un nodo de destino no
puede superar la capacidad del arco. Por ejemplo, del nodo 1 al nodo 2 sólo se pueden enviar 7
unidades.
Función Objetivo: Maximizar las unidades que salen del nodo de origen (1) a los nodos que esta
conectada (2 y 3) o alternativamente maximizar las unidades que llegan al nodo de destino (7) desde los
nodos que conectan a él (4, 5 y 6).
Restricciones:
Flujo Máximo: La cantidad de unidades que sale de cada nodo de origen a un nodo de destino no
puede superar la capacidad del arco.
Calcular el peso que transporta el árbol de expansión mínima del grafo adjunto
V(T) = {A, B, C, F, D}
V(T) = {A, B, C, D, E, F}
Grafo resultante:
Grafo resultante:
Inicialmente el grafo ponderado no es un árbol (para serlo se requiere que no hubiera ciclos y en este caso
sí hay).
Comienza el proceso eligiendo las aristas con menor peso. En este caso, las aristas más cortas, con un
peso de 5 , son AD y CE.
Se elige arbitrariamente la arista AD y se marca.
El algoritmo de Kruskal comienza ordenando las aristas por su peso de menor a mayor. Posteriormente,
en ese orden, se van añadiendo aristas al árbol si no forman ciclo con las previamente añadidas.
Las aristas AB, CF y DE son las aristas más cortas, con peso
4. Se elige arbitrariamente la arista AB.
En el siguiente paso, quedan como aristas más cortas CF
y DE.
V(T) = {A, B, C, D, E, F}
Se van eligiendo las aristas más cortas (con menor peso) y se van resaltando, cuidando que al seleccionar
las aristas no formen un ciclo. Una posible secuencia sería:
De otra parte, si el coste de la conexión se incrementa 50 euros, el trazado no varía, aunque el coste
se incrementaría 9 x 50 = 450 euros.
El coste mínimo de la distribución sería 6700 + 450 = 7150 euros.
Se advierte que empleando el algoritmo de Kruskal el proceso hasta encontrar el árbol expandido
mínimo es tedioso, que va haciéndose más complejo a medida que aumentan los vértices del Grafo.
b) Encontrar un árbol generador de peso mínimo utilizando el algoritmo de Kruskal. ¿es euleriano del
grafo?. En caso afirmativo, encontrar un circuito euleriano del grafo.
b) Utilizando el algoritmo de Kruskal se comienza eligiendo las aristas que tienen menor peso, es decir,
las aristas más cortas, no formando ciclos, formando un conjunto que contenga a todas las aristas del
grafo (el algoritmo termina cuando todos los vértices están marcados).
8 nodos → 7aristas
B−C −D −B
A −B−E−F−H− A
A −E−G−H−E−D− A
GRAFO ADJUNTO
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤
Para obtener el árbol de expansión mínima se ⎢20 − 16 9 12 11 10 16 ⎥⎥
2 ⎢
selecciona el menor elemento de la red. 3 ⎢18 16 − 8 22 12 13 14 ⎥
⎢ ⎥
En este caso es el 8, al existir dos casillas con 4 ⎢14 9 8 − 13 16 21 17 ⎥
ese número, se selecciona uno cualquiera. ⎢ ⎥
5
⎢19 12 22 13 − 10 17 24 ⎥
distancia menor = d1 = 8 6 ⎢15 11 12 16 10 − 13 18 ⎥
⎢ ⎥
7 ⎢16 10 13 21 17 13 − 14 ⎥
8 ⎢13 16 14 17 24 18 14 − ⎥⎦
⎣
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤
2 ⎢20 − 12 11 16 ⎥⎥
⎢
3 ⎢18 − 22 12 14 ⎥
⎢ ⎥
Marcando la columna 7 que es donde se ha 4 ⎢14 − 13 16 17 ⎥
eliminado la casilla (7, 2). 5 ⎢19 12 22 13 − 10 17 24 ⎥
⎢ ⎥
6 ⎢15 11 12 16 10 − 13 18 ⎥
7 ⎢16 17 13 − 14 ⎥
⎢ ⎥
8 ⎣⎢13 16 14 17 24 18 14 − ⎦⎥
3º 1º 2º 4º
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤
Se selecciona el menor elemento de las ⎢ ⎥
columnas no marcadas, que es el elemento 10 2 ⎢20 − 12 11 16 ⎥
⎢ − 14 ⎥
de la casilla (5, 6). 3 ⎢18 22 12
⎥
4 ⎢14 − 13 16 17 ⎥
Se tachan las casillas (5, 6), (5, 2), (5, 3), (5, 4) y ⎢ ⎥
(5, 7), así como sus casillas simétricas: (6, 5), 5 ⎢19 12 22 13 − 10 17 24 ⎥
⎢ ⎥
(2, 5), (3, 5), (4, 5) y (7, 5) para evitar ciclos. 6 ⎢15 11 12 16 10 − 13 18 ⎥
⎢ ⎥
distancia menor = d4 = 10 7 ⎢16 17 13 − 14 ⎥
⎢ − ⎥⎦
8 ⎣13 16 14 17 24 18 14
3º 1º 2º 4º
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤
Se selecciona el menor elemento de las ⎢ ⎥
2 ⎢20 − 11 16 ⎥
columnas no marcadas, que es el elemento 11
⎢ − 14 ⎥
de la casilla (6, 2). 3 ⎢18 12
⎥
⎢ − 17 ⎥
Se tachan las casillas (6, 2), (6, 3), (6, 4) y (6, 7), 4 ⎢14 16
⎥
5 ⎢19 − 24 ⎥
así como sus casillas simétricas: (2, 6), (3, 6),
⎢ ⎥
(4, 6) y (7, 6) para evitar ciclos. 6 ⎢15 11 12 16 − 13 18 ⎥
distancia menor = d5 = 11 7 ⎢16 13 − 14 ⎥
⎢ ⎥
8 ⎢⎣13 16 14 17 24 18 14 − ⎥⎦
3º 1º 2º 5º 4º
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤
2 ⎢20 − 16 ⎥⎥
⎢
3 ⎢18 − 14 ⎥
⎢ ⎥
Marcando la columna 6 que es donde se 4 ⎢14 − 17 ⎥
ha seleccionado la casilla (6, 2). 5 ⎢19 − 24 ⎥
⎢ ⎥
6 ⎢15 − 18 ⎥
7 ⎢16 − 14 ⎥
⎢ ⎥
8 ⎣⎢13 16 14 17 24 18 14 − ⎦⎥
3º 1º 2º 5º 6º 4º
1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 ⎤
2 ⎢20 − ⎥
⎢ ⎥
3 ⎢18 − ⎥
⎢ ⎥
Marcando la columna 8 que es donde 4 ⎢14 − ⎥
se ha seleccionado la casilla (8, 1). 5 ⎢19 − ⎥
⎢ ⎥
6 ⎢15 − ⎥
7 ⎢16 − ⎥
⎢ ⎥
8 ⎢⎣ − ⎥⎦
3º 1º 2º 5º 6º 4º 7º
1 2 3 4 5 6 7 8
Se selecciona el menor elemento de las ⎡ ⎤
1 ⎢ − 20 18 14 19 15 16
⎥
columnas no marcadas, que es el elemento 14
2 ⎢ 20 − ⎥
de la casilla (1, 4). ⎢ ⎥
3 ⎢ 18 − ⎥
Se tachan todas las casillas de la columna 1, al 4 ⎢ 14 −
⎥
igual que sus simétricas. ⎢ ⎥
5 ⎢ 19 − ⎥
El algoritmo de Kruskal ha finalizado al tener 6 ⎢⎢ ⎥
⎥
15 −
todas las columnas marcadas. 7 ⎢ ⎥
⎢ 16 − ⎥
8 ⎢
− ⎥⎦
distancia menor = d7 = 14
⎣
3º 1º 2º 5º 6º 4º 7º
A B C D E F G H I J
A 10 11 14
B 10 15 8
C 15 9 7 8
D 9 6
E 11 9
1 F 14 8 9 9 5 11
⎯⎯→
G 7 9 14 8
H 8 6 14
I 51 6
J 11 8 6
1
De los elementos de la fila ⎯⎯→ F marcada se elige el elemento de menor valor que es 5 y se
marca. Se elimina la columna I y se marca la fila I como la segunda.
De las filas marcadas hasta este momento (F, I) se elige el elemento con menor valor y no marcado
anteriormente. En la fila I está el elemento 6 y se marca, eliminando la columna J donde se encuentra,
marcando la fila J como la tercera.
A B C D E F G H I J
A 10 11 14
B 10 15 8
C 15 9 7 8
D 9 6
E 11 9
1
⎯⎯→ F 14 8 9 9 52 11
G 7 9 14 8
H 8 6 14
2
⎯⎯→ I 51 63
3 J 11 8 6
⎯⎯→
De las filas marcadas hasta ahora (F, I, J) se elige el elemento con menor valor y no marcado
anteriormente, que es un 8. Se elige arbitrariamente el 8 de la columna G, elimiando la columna G y
marcando la fila G como la cuarta.
Sigue el proceso, de las filas marcadas (F, I, J, G) se elige el elemento con menor valor y no marcado
anteriormente. En la fila G está el elemento 7 y se marca, eliminando la columna C y marcando la fila C
como la quinta.
A B C D E F G H I J
A 10 11 14
B 10 15 8
5 C 15 9 7 8
⎯⎯→
D 9 6
E 11 9
1
⎯⎯→ F 14 8 9 9 52 11
4
⎯⎯→ G 75 9 14 8
H 8 6 14
2
⎯⎯→ I 51 63
3
⎯⎯→ J 11 84 6
De las filas marcadas (F, I, J, G, C) se elige el elemento con menor valor y no marcado anteriormente. El
elemento con menor valor es el 8, que se encuentra en la fila C y en la fila F, se elige arbitrariamente el 8
de la columna B, eliminando la columna y marcando la fila B como la sexta.
De las filas marcadas (F, I, J, G, C) se elige el elemento con menor valor y no marcado anteriormente. El
elemento con menor valor es el 8 que se encuentra en la columna H, se elimina la columna y se marca la
fila H como la séptima.
A B C D E F G H I J
A 10 11 14
6 B 10 15 8
⎯⎯→
5
⎯⎯→ C 15 9 7 87
D 9 6
E 11 9
1
⎯⎯→ F 14 86 9 9 52 11
4
⎯⎯→ G 75 9 14 8
7 H 8 6 14
⎯⎯→
2
⎯⎯→ I 51 63
3
⎯⎯→ J 11 84 6
De las filas marcadas (F, I, J, G, C, H) se elige el elemento con menor valor y no marcado anteriormente.
El elemento con menor valor es el 6 que se encuentra en la columna D, se elimina la columna y se marca
la fila D como la octava.
De las filas marcadas (F, I, J, G, C, H, D) se elige el elemento con menor valor y no marcado
anteriormente. El elemento con menor valor es el 9 que se encuentra en la columna E, se elimina la
columna y se marca la fila E como la novena.
A B C D E F G H I J
A 10 11 14
6 B 10 15 8
⎯⎯→
5
⎯⎯→ C 15 9 7 87
8 D 9 6
⎯⎯→
9 E 11 9
⎯⎯→
1
⎯⎯→ F 14 86 99 9 52 11
4
⎯⎯→ G 75 9 14 8
7
⎯⎯→ H 8 68 14
2
⎯⎯→ I 51 63
3
⎯⎯→ J 11 84 6
Finalmente, el proceso finaliza marcando el menor valor de la columna A que es el 10, se elimina la
columna y se marca la fila A como la décima.
⎯⎯5
→ C 15 9 7 87
8 D 9 6
⎯⎯ →
9 E 11 9
⎯⎯ →
1
⎯⎯ → F 14 86 99 9 52 11
⎯⎯4
→ G 75 9 14 8
⎯⎯7
→ H 8 68 14
⎯⎯2
→ I 51 63
⎯⎯3
→ J 11 84 6
En un diagrama:
Se elige inicialmente el elemento de menor valor. En este caso hay tres con valor 1, se selecciona uno de
ellos, por ejemplo el 1 de la columna F y se marca, se elimina la columna donde se encuentra y se marca
la fila F como la primera.
A B C D E F G
A 3 1
B 3 8 7 5
C 1 8
D 7 6 9
E 5 6 1 2
1 F 1 4
⎯⎯→
G 9 2 4
A B C D E F G
A 3 1
B 3 8 7 5
C 1 8
D 7 6 9
2 E 5 6 2
⎯⎯→ 1
1 F 4
⎯⎯→ 1
G 9 2 4
De filas marcadas (E, F) se elige el elemento con menor valor, no marcado anteriormente. En la fila E
está el elemento 2, se marca y se elimina la columna G donde se encuentra, quedando la fila G como
tercera.
A B C D E F G
A 3 1
4 B 3 8 7 5
⎯⎯→
C 1 8
D 7 6 9
2 E 6
⎯⎯→ 5 1 2
1 F 4
⎯⎯→ 1
3 G 9 2 4
⎯⎯→
De filas marcadas (B, E, F, G) se elige el elemento con menor valor, no marcado anteriormente. En la fila
B está el elemento 3, se marca y se elimina la columna A donde se encuentra, quedando la fila A como
quinta.
A B C D E F G
5 A 3 1
⎯⎯→
4 B 8 7 5
⎯⎯→ 3
C 1 8
D 7 6 9
2 E 6
⎯⎯→ 5 1 2
1 F 4
⎯⎯→ 1
3
⎯⎯→ G 9 2 4
De filas marcadas (A, B, E, F, G) se elige el elemento con menor valor, no marcado anteriormente. En la
fila A está el elemento 1, se marca y se elimina la columna C donde se encuentra, quedando la fila C
como sexta.
A B C D E F G
5 A 3
⎯⎯→ 1
4 B 8 7 5
⎯⎯→ 3
6 C 1 8
⎯⎯→
7 D 7 6 9
⎯⎯→
2 E
⎯⎯→ 5 6 1 2
1 F 4
⎯⎯→ 1
3 G 9 2 4
⎯⎯→
En un diagrama:
Al iniciar el algoritmo se elige el elemento de menor valor. En este caso hay tres elementos con valor 2, se
selecciona arbitrariamente uno de ellos, por ejemplo el 2 de la columna D y se marca. Se elimina la
columna D y se marca la fila D como la primera.
A B C D E F G H I T
9 A 7 8
⎯⎯→
7 B 79 7 8 6
⎯⎯→
5 C 8 7 6 46
⎯⎯→
1 D 8 22 3 34
⎯⎯→
2 E 67 65 21 7 23 6
⎯⎯→
6 F 4 7 9 68
⎯⎯→
3 G 3 2 5 9
⎯⎯→
4 H 3 6 9 5 8 8
⎯⎯→
8 I 6 8 810
⎯⎯→
⎯⎯
10
→ T 9 8 8
Para obtener una optimización de la línea, suponiendo que las líneas fueran bidireccionales y no fuera
deseable que se formasen ciclos, la empresa ferroviaria contrata a una consultoría de comunicaciones
para que dé respuestas a las preguntas siguientes:
a) ¿Qué tendido mínimo de cable es necesario para unir todas las estaciones?
b) ¿Con qué configuración se lograría conectar todas las estaciones a la mayor velocidad posible?
a) Para obtener el mínimo tendido de cable (mínima longitud) se elabora la siguiente matriz de Sollin:
A B C D E F G
6 A 6 6 5 6
⎯⎯→
7 B 6 8 7
⎯⎯→
3 C 8 34 3
⎯⎯→
4 D 66 77 3 3 4
⎯⎯→
1 E 5 3 45 22
⎯⎯→
5 F 6 4 4
⎯⎯→
2 G 33 4 21 4
⎯⎯→
b) Para configurar todas las estaciones a la mayor velocidad posible hay que encontrar el "árbol
generador de máxima velocidad de transmisión", esto es, que la suma de los pesos de sus aristas sea
máxima.
A B C D E F G
1 A 95 102 5 94
⎯⎯→
5 B 9 7 4
⎯⎯→
7 C 7 8 96
⎯⎯→
2 D 101 4 8 93 7
⎯⎯→
3 E 10 9 9 5
⎯⎯→
4 F 9 9 9
⎯⎯→
6 G 97 7 5 9
⎯⎯→
a) Diseñar la red de metro de forma que las estaciones queden conectadas a coste mínimo. ¿Cuál será
la red a construir y cuál su longitud?
b) El Ayuntamiento de Valladolid impone la condición de que entre dos estaciones de metro no tiene
que haber más de cuatro estaciones intermedias, ¿Cuál sería la red de metro?
a) Se trata de construir un árbol generador mínimo para la red conexa de la figura. Para ello, se aplica
el algoritmo de Sollin, comenzando por establecer la matriz de incidencia asociada al grafo.
A B C D E F G H I J
3 A 4 54 8 5 7 6
⎯⎯→
2 B 43 7 10 9 6 21 5
⎯⎯→
4 C 5 7 8 3 6
⎯⎯→
D 10 8 6 9 13 5
E 8 9 9 7 16
F 5 6 3 6
1 G 22 9 6 11
⎯⎯→
H 7 6 13 9 12 13
I 6 5 7 6 12
J 5 16 11 13
a a a a
3 2 4 1
A B C D E F G H I J
3 A 4 54 8 5 7 6
⎯⎯ →
2 B 43 7 10 9 6 21 56
⎯⎯ →
4 C 5 7 8 35 67
⎯⎯ →
8 D 10 8 6 9 13 59
⎯⎯ →
10 E 8 9 9 7 16
⎯⎯→
5 F 5 6 3 68
⎯⎯ →
1 G 22 9 6 11
⎯⎯ →
7 H 7 6 13 9 12 13
⎯⎯ →
6 I 6 5 710 6 12
⎯⎯ →
9 J 5 16 11 13
⎯⎯ →
3a 2a 4a 8a 10a 5a 1a 7a 6a 9a
En cualquier caso, la arista elegida no se añade directamente al árbol hasta verificar que proporciona
una posible cadena. Una vez que ha sido obtenida, la arista no se elimina del árbol en posteriores
iteraciones del proceso
GRAFO ADJUNTO:
Se selecciona el mínimo elemento de la tabla
(elemento 8) que se encuentra en la casilla
(3, 4). En caso de existir varios, se selecciona
uno cualquiera.
Se eliminan las columnas 3 y 4 , marcando las
filas 3 y 4.
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤ 1 ⎡− 20 19 15 16 13 ⎤
⎢20 16 ⎥⎥
2 ⎢ − 16 9 12 11 10 2 ⎢⎢20 − 12 11 10 16 ⎥⎥
3 ⎢18 16 − 8 22 12 13 14 ⎥ 1• 3 ⎢18 16 22 12 13 14 ⎥
⎢ ⎥ • ⎢ ⎥
4 ⎢14 9 8 − 13 16 21 17 ⎥ 2 4 ⎢14 9 13 16 21 17 ⎥
⎢ ⎥ 5 ⎢19 − 24 ⎥
5
⎢19 12 22 13 − 10 17 24 ⎥ 12 10 17
⎢ ⎥
6 ⎢15 11 12 16 10 − 13 18 ⎥ 6 ⎢15 11 10 − 13 18 ⎥
⎢ ⎥
7 ⎢16 10 13 21 17 13 − 14 ⎥ 7 ⎢16 10 17 13 − 14 ⎥
⎢ ⎥
8 ⎢ − ⎦⎥ 8 ⎢⎣13 16 24 18 14 − ⎥⎦
⎣13 16 14 17 24 18 14
Como no están marcadas todas las filas, el algoritmo sigue. Se selecciona el mínimo elemento que
pertenece a las filas marcadas y no pertenecen a las columnas eliminadas.
GRAFO ADJUNTO:
Se selecciona el máximo elemento de la tabla
(elemento 24) que se encuentra en la casilla
(8, 5).
Se eliminan las columnas 5 y 8, y se marcan las
filas 5 y 8.
En caso de existir varios, se selecciona uno
cualquiera.
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
1 ⎡− 20 18 14 19 15 16 13 ⎤ 1 ⎡− 20 18 14 15 16 ⎤
⎢ 16 ⎥⎥
2 ⎢20 − 16 9 12 11 10 2 ⎢⎢20 − 16 9 11 10 ⎥
⎥
3 ⎢18 16 − 8 22 12 13 14 ⎥ 3 ⎢18 16 − 8 12 13 ⎥
⎢ ⎥ ⎢ ⎥
4 ⎢14 9 8 − 13 16 21 17 ⎥ 4 ⎢14 9 8 − 16 21 ⎥
5 ⎢19 12 22 13 − 10 17 24 ⎥ 1a 5 ⎢19 12 22 13 − 10 17 ⎥
⎢ ⎥ ⎢ ⎥
6 ⎢15 11 12 16 10 − 13 18 ⎥ 6 ⎢15 11 12 16 − 13 ⎥
⎢ ⎥
7 ⎢16 10 13 21 17 13 − 14 ⎥ 7 ⎢16 10 13 21 13 − ⎥
⎢ ⎥
8 ⎢⎣13 16 14 17 24 18 14 − ⎥⎦ 2 8 ⎢⎣13
a
16 14 17 18 14 − ⎥⎦
Se selecciona el máximo elemento que pertenece a las filas marcadas y no pertenecen a las columnas
eliminadas.
El máximo elemento es el 19, que se encuentra en la casilla (5, 1), se elimina la columna 1 y se marca la
fila 1.
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
1 ⎡ − 20 14 15 16 ⎤ 4a 1 ⎡− 20 14 15 16 ⎤
⎢ ⎥
2 ⎢ 20 − 9 11 10 ⎥ 2 ⎢⎢ − 9 11 10 ⎥
⎥
3a 3 ⎢ 18 16 − 8 12 13 ⎥ 3a 3 ⎢ 16 − 8 12 13 ⎥
⎢ ⎥ ⎢ ⎥
4 ⎢ 14 9 − 16 21 ⎥ 4 ⎢ 9 − 16 21 ⎥
1a 5 ⎢ 19 12 13 − 10 17 ⎥ 1a 5 ⎢ 12 13 − 10 17 ⎥
⎢ ⎥ ⎢ ⎥
6 ⎢ 15 11 16 − 13 ⎥ 6 ⎢ 11 16 − 13 ⎥
7 ⎢ 16 10 21 13 −
⎥ 7 ⎢ 10 21 13 − ⎥
⎢ ⎥ ⎢ ⎥
2a 8 ⎢⎣ 13 16 17 18 14 − ⎥⎦ 2a 8 ⎣⎢ 16 17 18 14 − ⎦⎥
Se selecciona el máximo elemento que pertenece a las filas marcadas y no pertenecen a las columnas
eliminadas.
El máximo elemento es el 20, que se encuentra en la casilla (1, 2), se elimina la columna 2 y se marca la
fila 2.
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
a
4 1 ⎡− 20 14 15 16 ⎤ 4 1 ⎡−
a
14 15 16 ⎤
⎢ ⎥ ⎢ ⎥
2 ⎢ − 9 11 10 ⎥ 5a 2 ⎢ − 9 11 10 ⎥
a
3 3 ⎢ 16 − 8 12 13 ⎥ 3a 3 ⎢ − 8 12 13 ⎥
⎢ ⎥ ⎢ ⎥
4 ⎢ 9 − 16 21 ⎥ 4 ⎢ − 16 21 ⎥
a
1 5 ⎢ 12 13 − 10 17 ⎥ 1a 5 ⎢ 13 − 10 17 ⎥
⎢ ⎥ ⎢ ⎥
6 ⎢ 11 16 − 13 ⎥ 6 ⎢ 16 − 13 ⎥
⎢ ⎥ 7 ⎢ − ⎥
7
⎢ 10 21 13 − ⎥
21 13
⎢ ⎥
a
2 8 ⎢⎣ 16 17 18 14 − ⎥⎦ 2a 8 ⎢⎣ 17 18 14 − ⎥⎦
Se selecciona el máximo elemento que pertenece a las filas marcadas y no pertenecen a las columnas
eliminadas.
Se selecciona el máximo elemento que pertenece a las filas marcadas y no pertenecen a las columnas
eliminadas.
El máximo elemento es el 17, que se encuentra en la casilla (8, 4), se elimina la columna 4 y se marca la
fila 4.
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
a
4 1 ⎡− 14 16 ⎤ 4 1 ⎡−
a
16 ⎤
⎢ − ⎥ ⎢ ⎥
5a 2 ⎢ 9 10 ⎥ 5a 2 ⎢ − 10 ⎥
3a 3 ⎢ − 8 13 ⎥ 3a 3 ⎢ − 13 ⎥
⎢ ⎥ ⎢ ⎥
4 ⎢ − 21 ⎥ 7a 4 ⎢ − 21 ⎥
a
1 5 ⎢ 13 − 17 ⎥ 1a 5 ⎢ − 17 ⎥
⎢ ⎥ ⎢ ⎥
6a 6 ⎢ 16 13 ⎥ 6a 6 ⎢ 13 ⎥
7 ⎢ 21 − ⎥ 7 ⎢ − ⎥
⎢ ⎥ ⎢ ⎥
2a 8 ⎢⎣ 17 14 − ⎥⎦ 2a 8 ⎢⎣ 14 − ⎥⎦
Se selecciona el máximo elemento que pertenece a las filas marcadas y no pertenecen a las columnas
eliminadas.
El máximo elemento es el 21, que se encuentra en la casilla (4, 7), se elimina la columna 7 y se marca la
fila 7.
1 ⎡ − 20 18 14 19 15 16 13 ⎤
⎢ ⎥
Longitud máxima del árbol: 2 ⎢ 20 − 16 9 12 11 10 16 ⎥
19 + 20 + 22 + 17 + 18 + 21 + 24 = 141 3 ⎢⎢ 18 16 − 8 22 12 13 14 ⎥
⎥
4 ⎢ 14 9 8 − 13 16 21 17 ⎥
El coste máximo de la distribución: ⎢ ⎥
5 ⎢ 19 12 22 13 − 10 17 24 ⎥
141 x 100 = 14.100 euros. 6 ⎢ 15 11 12 16 10 − 13 18 ⎥
⎢ ⎥
7 ⎢ 16 10 13 21 17 13 − 14 ⎥
8 ⎢ 13 ⎥
− ⎥⎦
⎢⎣ 16 14 17 24 18 14