La PizarraMatemática.

Bachillerato

Caminos y algoritmos elementales en redes

En una red, ir con menos pasos, gastar menos, conectar todos los lugares y recorrer cada enlace son preguntas diferentes. Empezaremos sumando una ruta y después seguiremos los algoritmos con etiquetas y decisiones pequeñas. Cada método irá acompañado de la condición que permite confiar en su resultado.

1. El coste suma pesos; la cantidad de pasos cuenta aristas

En la red del dibujo, los números son costes declarados. El coste de un recorrido es la suma de los pesos que utiliza, contando cada uso. Si no hay pesos, su longitud suele ser el número de aristas. Elegir menos pasos no asegura gastar menos.

Una conexión directa cara puede perder frente a varios pasos baratos
41216ABCDUn peso pertenece a una conexión.
Grafo no dirigido con AB de peso cuatro, AC uno, BC dos, BD uno y CD seis. La ruta A C B D cuesta uno más dos más uno, igual a cuatro, mientras A B D cuesta cinco y A C D siete. Los pesos son costes declarados, no distancias del dibujo.

La distancia mínima busca el menor coste entre recorridos admitidos. Con pesos no negativos, si el destino es alcanzable existe un camino simple óptimo: quitar un ciclo no aumenta el coste. Si no se puede llegar, usamos ∞ como señal de inaccesibilidad, no como el peso de un recorrido encontrado.

Tres pasos baratos frente a dos más caros

Compara A−B−D, A−C−D y A−C−B−D en el dibujo.

  1. Primera

    Dos aristas: 4+1=5.
  2. Segunda

    Dos aristas: 1+6=7.
  3. Tercera

    Tres aristas: 1+2+1=4.
Resultado

La tercera cuesta menos aunque usa más conexiones.

Lo comprobamos

Comparar tres rutas no demuestra por sí solo que ya hayamos considerado todas; el algoritmo dará la garantía.

Cada repetición vuelve a aportar su peso

Calcula el coste de A−C−A−B−D.

  1. Ida y vuelta

    AC cuesta uno en cada sentido: dos en total.

  2. Resto

    AB cuatro y BD uno.

  3. Suma

    1+1+4+1=7.
Resultado

Siete.

Lo comprobamos

Eliminar A−C−A deja A−B−D, de coste cinco: el ciclo no ayudaba con estos pesos positivos.

2. BFS explora por niveles; DFS sigue una rama y vuelve atrás

BFS, búsqueda por anchura, empieza en nivel cero y descubre primero los vecinos, luego quienes están a dos aristas, y así sucesivamente. Una cola atiende los vértices en orden de llegada. Guardamos un predecesor al descubrir cada uno para reconstruir su primer camino.

Ese primer descubrimiento minimiza el número de aristas: ningún nivel posterior puede ofrecer menos pasos. DFS, búsqueda por profundidad, continúa por una rama hasta no poder avanzar y retrocede; usa pila o recursión. Explora conectividad, pero su primer camino encontrado no tiene por qué ser el más corto.

BFS ignorando los pesos para contar pasos

En la red del dibujo, parte de A y atiende B antes que C.

  1. Nivel cero

    A. Cola inicial [A].

  2. Descubrir vecinos

    Al retirar A añadimos B,C, nivel uno: cola [B,C].

  3. Retirar B

    Descubre D, nivel dos, con predecesor B: cola [C,D].

  4. Reconstruir

    D←B←A da A−B−D, dos aristas.

Resultado

La menor cantidad de pasos de A a D es dos.

Lo comprobamos

Su coste cinco no es el menor coste ponderado, que era cuatro.

La primera rama de DFS puede dar una ruta más larga

Prueba DFS de A tomando B primero, y en B tomando C antes que D.

  1. Rama

    A−B−C.

  2. Continuar

    Desde C descubre D: A−B−C−D.

  3. Comparar pasos

    Ese primer camino tiene tres aristas, frente a las dos de A−B−D.

Resultado

DFS encuentra un camino válido, pero no garantiza el menor número de pasos.

Lo comprobamos

El orden de vecinos puede cambiar cuál se descubre primero; BFS conserva su garantía por niveles.

3. Dijkstra guarda rutas provisionales y fija la etiqueta menor pendiente

Para pesos no negativos, Dijkstra inicia d(A)=0 y las demás etiquetas en ∞. Una etiqueta finita es el coste de una ruta ya descubierta. En cada paso fijamos el vértice pendiente de menor etiqueta y probamos pasar por él hacia sus vecinos.

La ruta azul cuesta cuatro, aunque utiliza tres conexiones
41216ABCDA → C → B → D : coste 4
Grafo no dirigido con AB de peso cuatro, AC uno, BC dos, BD uno y CD seis. La ruta A C B D cuesta uno más dos más uno, igual a cuatro, mientras A B D cuesta cinco y A C D siete. Los pesos son costes declarados, no distancias del dibujo.

Relajar una arista u−v significa comparar d(v) con d(u)+peso(u,v). Si esta última suma es menor, actualizamos la etiqueta y su predecesor. Una etiqueta provisional puede mejorar. Podemos terminar cuando se fija el destino, no cuando se descubre por primera vez.

Etiquetas tras relajar los vecinos del vértice recién fijado.
Pasod(A)d(B)d(C)d(D)
Inicial0∞∞∞
Fijar A041∞
Fijar C0317
Fijar B0314
Fijar D0314

Un trazado completo

Halla la distancia mínima de A a D en la red del dibujo.

  1. Fijar A=0

    B recibe cuatro y C recibe uno. D sigue sin ruta conocida.

  2. Fijar C=1

    Pasar por C mejora B a 1+2=3 y descubre D con 1+6=7.
  3. Fijar B=3

    Mejora D a 3+1=4.
  4. Fijar D=4

    Predecesores: D viene de B, B de C y C de A. Ruta A−C−B−D.

Resultado

Distancia cuatro por A−C−B−D.

Lo comprobamos

Los pesos son no negativos y cada etiqueta se hizo definitiva solo al ser la menor pendiente.

Descubrir el destino no termina la búsqueda

Después de fijar C, D tiene etiqueta siete. ¿Podemos parar?

  1. Pendientes

    B tiene etiqueta tres y D siete.

  2. Siguiente elección

    Corresponde fijar B antes que D.

  3. Mejora

    B ofrece a D una ruta de coste cuatro.

Resultado

No; siete era provisional y la respuesta final es cuatro.

Lo comprobamos

Se actualiza también el predecesor de D de C a B, para reconstruir la nueva ruta y no solo su número.

4. Una etiqueta solo es definitiva porque no quedan atajos de coste negativo

Al fijar la menor etiqueta pendiente, una ruta alternativa que pasa por otro vértice todavía pendiente no puede mejorarla: llegar a ese otro vértice no cuesta menos y las aristas restantes no reducen el coste. Ese argumento usa que todos los pesos sean no negativos.

El camino por C mejora un destino que parecía tener etiqueta dos
25-4ABCA → C → B : 5 − 4 = 1
Grafo dirigido con A a B de peso dos, A a C de peso cinco y C a B de peso menos cuatro. La ruta A C B cuesta uno y muestra por qué una arista negativa invalida la fijación definitiva de B con dos.

Con pesos negativos se necesita otro método, como Bellman-Ford, y revisar ciclos negativos. Si se puede alcanzar un ciclo de coste negativo y luego el destino, repetirlo abarata sin límite y no existe coste mínimo finito entre recorridos que permiten repeticiones. En no dirigidos una arista negativa ya permite una ida y vuelta de coste negativo.

Una arista negativa rompe la elección definitiva

En el grafo dirigido del dibujo hay A→B=2, A→C=5 y C→B=−4.

  1. Etiquetas iniciales desde A

    B recibe dos y C cinco.

  2. Elección prematura de la versión de Dijkstra que fija

    Fijaría B con dos.

  3. Ruta mejor

    A→C→B cuesta 5−4=1, menor que dos.
Resultado

No se puede aplicar sin más esa versión de Dijkstra.

Lo comprobamos

Aquí ni siquiera hace falta un ciclo negativo para que falle su argumento de fijación.

Un ciclo permite abaratar cada repetición

Hay A→B=1, B→C=−2, C→B=1 y B→D=1.

  1. Ciclo

    B→C→B cuesta −1.
  2. Ruta sin vueltas

    A→B→D cuesta dos.
  3. Con k vueltas

    El coste pasa a 2−k.

  4. Sin cota inferior

    k puede crecer y reducir el coste tanto como se quiera.

Resultado

No hay distancia mínima finita de A a D permitiendo repeticiones.

Lo comprobamos

El ciclo debe ser alcanzable desde el origen y permitir llegar después al destino; un ciclo aislado no basta.

5. Un árbol mínimo conecta todos los lugares con menor coste total

En un grafo no dirigido conexo, un árbol generador mínimo conecta todos los vértices sin ciclos y minimiza la suma de las aristas elegidas. Tiene n−1 aristas. Esa pregunta es distinta de conservar las rutas más baratas desde un origen a cada destino.

Conectar los tres lugares cuesta menos que conservar las dos rutas directas desde A
221ABCÁrbol mínimo: coste total 3
Triángulo no dirigido con AB dos, AC dos y BC uno. Un árbol mínimo usa BC y una de las aristas de peso dos, total tres. El árbol de rutas más cortas desde A usa AB y AC, total cuatro, porque conserva distancia dos a cada destino.

Kruskal ordena aristas por peso y añade cada una solo si une componentes distintas, evitando ciclos. Prim empieza con un vértice y añade la arista más barata que sale del árbol actual hacia un vértice nuevo. Ambos admiten empates y pueden producir árboles mínimos diferentes.

Kruskal en tres vértices

Con AB=2, AC=2 y BC=1, construye un árbol mínimo.

  1. Primera elección

    BC pesa uno y une B con C.

  2. Conectar A

    AB y AC empatan a dos; podemos elegir cualquiera.

  3. Detener

    Con dos aristas se conectan tres vértices; coste tres.

Resultado

BC y AB, o BC y AC; coste mínimo tres.

Lo comprobamos

Añadir la tercera arista cerraría un ciclo y no hace falta para conectar.

Prim y la diferencia frente a rutas desde A

En ese triángulo, empieza Prim en A y elige AB en el empate.

  1. Árbol actual

    A,B con AB de peso dos.

  2. Cruzar hacia C

    BC cuesta uno y AC dos: elegimos BC.

  3. Coste total

    Tres. Pero la ruta A−B−C dentro del árbol cuesta tres, frente al enlace directo AC de coste dos.

Resultado

Árbol mínimo de coste tres; no conserva todas las distancias mínimas desde A.

Lo comprobamos

El árbol de rutas directas AB y AC sí conserva distancia dos a ambos destinos, pero su coste total es cuatro.

6. Las elecciones son seguras por un intercambio que no empeora el coste

Un corte divide los vértices en dos grupos no vacíos. Una arista de peso mínimo que cruza el corte puede formar parte de algún árbol mínimo. Si un árbol mínimo no la contiene, añadirla crea un ciclo; quitamos de ese ciclo otra arista que cruza el mismo corte y no pesa menos.

Seguimos conectados y el coste no aumenta.

Para conservar las elecciones anteriores, usamos cortes que no separan ninguna arista ya elegida. Prim toma el corte entre su árbol y el resto; Kruskal puede usar una componente actual y las demás. Elegir simplemente las n−1 aristas globalmente más baratas sin evitar ciclos no ofrece esa garantía.

Si el grafo es desconectado, Kruskal produce un bosque mínimo, no un árbol que conecte todo.

Un corte explica una elección

En el triángulo anterior, toma el corte {C} frente a {A,B}.

  1. Aristas que cruzan

    BC de peso uno y AC de peso dos.

  2. La más ligera

    BC.

  3. Intercambio

    Si un árbol usara AB y AC, añadir BC y quitar AC baja el coste de cuatro a tres.

Resultado

BC es una elección segura para algún árbol mínimo.

Lo comprobamos

Si hubiera empate, un intercambio podría mantener el mismo coste y permitir varios óptimos.

Las tres más baratas pueden dejar un vértice fuera

Hay triángulo ABC con sus tres pesos uno y solo un enlace CD de peso diez hacia D.

  1. Elección incorrecta

    Las tres aristas de peso uno forman un ciclo y dejan D aislado.

  2. Kruskal

    Añade dos del triángulo, omite la tercera para no crear ciclo y añade CD.

  3. Coste

    1+1+10=12.
Resultado

El árbol mínimo cuesta doce.

Lo comprobamos

CD es imprescindible y dos aristas del triángulo bastan; eso también prueba una cota inferior de doce.

7. Euler usa cada arista una vez; Hamilton visita cada vértice una vez

Para un grafo finito no dirigido con aristas, todas ellas deben estar en una misma componente para poder recorrerlas juntas; los vértices aislados no estorban. Hay recorrido euleriano cerrado si todos los grados son pares, y abierto con extremos distintos si exactamente dos grados son impares.

Al entrar y salir se emparejan incidencias; los extremos abiertos dejan una sin pareja cada uno.

Repetir A permite usar todas las aristas, pero impide un ciclo que visite cada vértice una vez
ABCDEAristas una vez ≠ vértices una vez
Dos triángulos A B C A y A D E A comparten solo el vértice A. Todos los grados son pares y el recorrido A B C A D E A es euleriano. No hay ciclo hamiltoniano: salir de un triángulo al otro y cerrar el ciclo exige volver a pasar por A.

La suficiencia se construye enlazando recorridos cerrados hasta agotar las aristas; con dos impares se puede añadir temporalmente una conexión entre ellos y después cortarla. Un camino hamiltoniano visita cada vértice una vez; un ciclo hamiltoniano además vuelve al inicio. La prueba de paridad para Euler no decide ese problema.

Un recorrido abierto puede repetir vértices

Para E={AB,AC,AD,BC}, construye un recorrido euleriano.

  1. Grados

    A tres, B dos, C dos, D uno: impares A y D.

  2. Recorrer

    D−A−B−C−A usa AD,AB,BC,AC una vez cada una.

  3. Extremos

    Empieza en D y termina en A, como exige la paridad.

Resultado

D−A−B−C−A es euleriano abierto.

Lo comprobamos

A se repite como vértice, pero ninguna arista se repite; por eso no es un camino hamiltoniano.

Dos triángulos comparten un vértice

En el dibujo, compara un ciclo euleriano y la posibilidad de uno hamiltoniano.

  1. Grados

    A tiene cuatro y B,C,D,E tienen dos: todos pares, con aristas conectadas.

  2. Euler

    A−B−C−A−D−E−A usa las seis aristas una vez.

  3. Hamilton cerrado

    Para pasar entre los triángulos solo se usa A. Un ciclo que visitara todos tendría que repetir A antes de completar el regreso final.

Resultado

Hay recorrido euleriano cerrado, pero no ciclo hamiltoniano.

Lo comprobamos

La conexión entre ambos triángulos se concentra en A; los grados pares no eliminan esa dificultad.

8. Elegimos el método a partir de la pregunta y comprobamos su respuesta

Primero decidimos si buscamos pocos pasos, bajo coste, conectar toda la red o usar cada conexión una vez. Después comprobamos pesos, sentidos y conexión. La misma red puede dar respuestas distintas a esas preguntas, sin que ninguna de ellas sustituya a las otras.

Una ruta se entrega con su secuencia, suma de pesos y garantía de mínimo. Un árbol mínimo necesita además conexión y ausencia de ciclos. Con listas de adyacencia, BFS y DFS revisan un número de datos proporcional a n+m, escrito O(n+m): n vértices y m aristas.

Dijkstra y los algoritmos de árboles añaden selección por prioridad u ordenación según la implementación.

Pregunta y condición principal del método estudiado.
PreguntaMétodoCondición
Menor número de aristasBFSConexiones sin costes diferentes, o todos unitarios
Menor coste desde un origenDijkstraTodos los pesos no negativos
Conectar con menor suma totalKruskal o PrimNo dirigido y conexo para un árbol global
Cada arista una vezCriterio de Euler de esta páginaNo dirigido; revisar conexión y grados

Una red, tres objetivos

En el primer dibujo, elige método para menos pasos A a D, menor coste A a D y conectar los cuatro lugares.

  1. Menos pasos

    BFS: dos aristas.

  2. Menor coste

    Dijkstra porque todos los pesos son no negativos: coste cuatro.

  3. Conectar todos

    Kruskal o Prim: un árbol, no solo una ruta entre dos destinos.

Resultado

BFS, Dijkstra y Kruskal o Prim, respectivamente.

Lo comprobamos

El nombre del método sale de la pregunta y sus condiciones, no solo de ver una red dibujada.

Un vértice inaccesible conserva su señal de ausencia

Añade un vértice E aislado a esa red y busca rutas desde A.

  1. Búsqueda

    Se fijan A,C,B,D y no aparece ninguna arista hacia E.

  2. Etiqueta

    d(E) sigue en ∞: no se ha encontrado ni existe un camino a ese vértice.

  3. Conectar todos

    Tampoco existe árbol generador de los cinco vértices; habrá un bosque con E aislado.

Resultado

E es inaccesible y no hay árbol generador global.

Lo comprobamos

No se inventa una arista para que el algoritmo produzca una respuesta conectada.

Ahora lo resolvemos de principio a fin.

EJEMPLO RESUELTO 1

Una ruta más barata

Aristas no dirigidas AB=2,AC=7,BC=3,BD=8,CD=1. Halla coste mínimo de A a D.

  1. Preparar etiquetas

    A cero; B,C,D con ∞. Los pesos son no negativos.

  2. Fijar A

    B recibe dos y C siete.

  3. Fijar B=2

    C mejora a 2+3=5 y D recibe 2+8=10.
  4. Fijar C=5

    D mejora a 5+1=6.
  5. Fijar D

    Seis es definitivo. Predecesores D←C←B←A dan A−B−C−D.

  6. Comprobar

    Pesos 2+3+1=6; las rutas A−C−D y A−B−D cuestan ocho y diez. La garantía de Dijkstra cubre las demás rutas.

Resultado

6, mediante A-B-C-D.

Lo comprobamos

La ruta A-C-D cuesta 8 y A-B-D cuesta 10.

EJEMPLO RESUELTO 2

Conectar tres lugares

Triángulo con pesos AB=2,BC=3,AC=8. Halla peso del árbol generador mínimo.

  1. Ordenar

    AB dos, BC tres, AC ocho.

  2. Primera elección

    AB une A con B.

  3. Segunda

    BC conecta C sin cerrar ciclo.

  4. Detener

    Tres vértices necesitan dos aristas; coste 2+3=5.

  5. Revisar

    Incluir AC junto a esas dos produciría ciclo. Sustituir alguna por AC elevaría el coste.

Resultado

5.

Lo comprobamos

Añadir AC crearía un ciclo y aumentaría el coste.

Los símbolos que hemos usado

s,t
Vértices de origen y destino de una búsqueda.
w(u,v)
Peso de la conexión entre u y v, con las unidades del modelo.
d(v)
Mejor coste provisional conocido desde el origen hasta v.
Relajar
Revisar si pasar por una arista mejora un coste provisional.
Árbol generador
Subgrafo que contiene todos los vértices y es un árbol.
Recorrido euleriano
Recorrido que utiliza cada arista exactamente una vez.

Ahora te toca a ti.

Tienes cinco ejercicios. Inténtalos; las pistas te ayudan si te atascas.

Practicar este tema →

Para ampliar