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.
Si necesitas repasar:
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.
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.
Primera
Dos aristas: 4+1=5.Segunda
Dos aristas: 1+6=7.Tercera
Tres aristas: 1+2+1=4.
La tercera cuesta menos aunque usa más conexiones.
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.
Ida y vuelta
AC cuesta uno en cada sentido: dos en total.
Resto
AB cuatro y BD uno.
Suma
1+1+4+1=7.
Siete.
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.
Nivel cero
A. Cola inicial [A].
Descubrir vecinos
Al retirar A añadimos B,C, nivel uno: cola [B,C].
Retirar B
Descubre D, nivel dos, con predecesor B: cola [C,D].
Reconstruir
D←B←A da A−B−D, dos aristas.
La menor cantidad de pasos de A a D es dos.
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.
Rama
A−B−C.
Continuar
Desde C descubre D: A−B−C−D.
Comparar pasos
Ese primer camino tiene tres aristas, frente a las dos de A−B−D.
DFS encuentra un camino válido, pero no garantiza el menor número de pasos.
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.
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.
| Paso | d(A) | d(B) | d(C) | d(D) |
|---|---|---|---|---|
| Inicial | 0 | ∞ | ∞ | ∞ |
| Fijar A | 0 | 4 | 1 | ∞ |
| Fijar C | 0 | 3 | 1 | 7 |
| Fijar B | 0 | 3 | 1 | 4 |
| Fijar D | 0 | 3 | 1 | 4 |
Un trazado completo
Halla la distancia mínima de A a D en la red del dibujo.
Fijar A=0
B recibe cuatro y C recibe uno. D sigue sin ruta conocida.
Fijar C=1
Pasar por C mejora B a 1+2=3 y descubre D con 1+6=7.Fijar B=3
Mejora D a 3+1=4.Fijar D=4
Predecesores: D viene de B, B de C y C de A. Ruta A−C−B−D.
Distancia cuatro por A−C−B−D.
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?
Pendientes
B tiene etiqueta tres y D siete.
Siguiente elección
Corresponde fijar B antes que D.
Mejora
B ofrece a D una ruta de coste cuatro.
No; siete era provisional y la respuesta final es cuatro.
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.
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.
Etiquetas iniciales desde A
B recibe dos y C cinco.
Elección prematura de la versión de Dijkstra que fija
Fijaría B con dos.
Ruta mejor
A→C→B cuesta 5−4=1, menor que dos.
No se puede aplicar sin más esa versión de Dijkstra.
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.
Ciclo
B→C→B cuesta −1.Ruta sin vueltas
A→B→D cuesta dos.Con k vueltas
El coste pasa a 2−k.
Sin cota inferior
k puede crecer y reducir el coste tanto como se quiera.
No hay distancia mínima finita de A a D permitiendo repeticiones.
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.
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.
Primera elección
BC pesa uno y une B con C.
Conectar A
AB y AC empatan a dos; podemos elegir cualquiera.
Detener
Con dos aristas se conectan tres vértices; coste tres.
BC y AB, o BC y AC; coste mínimo tres.
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.
Árbol actual
A,B con AB de peso dos.
Cruzar hacia C
BC cuesta uno y AC dos: elegimos BC.
Coste total
Tres. Pero la ruta A−B−C dentro del árbol cuesta tres, frente al enlace directo AC de coste dos.
Árbol mínimo de coste tres; no conserva todas las distancias mínimas desde A.
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}.
Aristas que cruzan
BC de peso uno y AC de peso dos.
La más ligera
BC.
Intercambio
Si un árbol usara AB y AC, añadir BC y quitar AC baja el coste de cuatro a tres.
BC es una elección segura para algún árbol mínimo.
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.
Elección incorrecta
Las tres aristas de peso uno forman un ciclo y dejan D aislado.
Kruskal
Añade dos del triángulo, omite la tercera para no crear ciclo y añade CD.
Coste
1+1+10=12.
El árbol mínimo cuesta doce.
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.
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.
Grados
A tres, B dos, C dos, D uno: impares A y D.
Recorrer
D−A−B−C−A usa AD,AB,BC,AC una vez cada una.
Extremos
Empieza en D y termina en A, como exige la paridad.
D−A−B−C−A es euleriano abierto.
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.
Grados
A tiene cuatro y B,C,D,E tienen dos: todos pares, con aristas conectadas.
Euler
A−B−C−A−D−E−A usa las seis aristas una vez.
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.
Hay recorrido euleriano cerrado, pero no ciclo hamiltoniano.
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 | Método | Condición |
|---|---|---|
| Menor número de aristas | BFS | Conexiones sin costes diferentes, o todos unitarios |
| Menor coste desde un origen | Dijkstra | Todos los pesos no negativos |
| Conectar con menor suma total | Kruskal o Prim | No dirigido y conexo para un árbol global |
| Cada arista una vez | Criterio de Euler de esta página | No 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.
Menos pasos
BFS: dos aristas.
Menor coste
Dijkstra porque todos los pesos son no negativos: coste cuatro.
Conectar todos
Kruskal o Prim: un árbol, no solo una ruta entre dos destinos.
BFS, Dijkstra y Kruskal o Prim, respectivamente.
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.
Búsqueda
Se fijan A,C,B,D y no aparece ninguna arista hacia E.
Etiqueta
d(E) sigue en ∞: no se ha encontrado ni existe un camino a ese vértice.
Conectar todos
Tampoco existe árbol generador de los cinco vértices; habrá un bosque con E aislado.
E es inaccesible y no hay árbol generador global.
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.
Preparar etiquetas
A cero; B,C,D con ∞. Los pesos son no negativos.
Fijar A
B recibe dos y C siete.
Fijar B=2
C mejora a 2+3=5 y D recibe 2+8=10.Fijar C=5
D mejora a 5+1=6.Fijar D
Seis es definitivo. Predecesores D←C←B←A dan A−B−C−D.
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.
6, mediante A-B-C-D.
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.
Ordenar
AB dos, BC tres, AC ocho.
Primera elección
AB une A con B.
Segunda
BC conecta C sin cerrar ciclo.
Detener
Tres vértices necesitan dos aristas; coste 2+3=5.
Revisar
Incluir AC junto a esas dos produciría ciclo. Sustituir alguna por AC elevaría el coste.
5.
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 →