Competitive Programming Academy · Lección

Floyd-Warshall para todos los pares

Encuentre caminos mínimos entre cada par

Lección 4 de 413 pasos

Floyd-Warshall para todos los pares es una lección gratuita de Competitive Programming Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Competitive Programming Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Competitive Programming Academy incluye 4 lecciones en total.

Todos los pares a la vez

A veces necesita el camino más corto entre cada par de nodos, no solo desde un origen. Ese es el problema de todos los pares.

Conozca Floyd-Warshall

Floyd-Warshall completa una tabla de distancias para todos los pares mediante tres bucles anidados y ordenados, con muy poca configuración.

La matriz de distancias

Use una matriz donde dist[i][j] sea el menor costo conocido de i a j. Inicialícela con las aristas directas proporcionadas.

dist = [[INF] * n for _ in range(n)]

Establezca la diagonal

Cada nodo puede llegar a sí mismo de forma gratuita, así que establezca en cero la diagonal dist[i][i] antes de comenzar a relajar.

for i in range(n):
    dist[i][i] = 0

La idea del nodo intermedio

El truco consiste en permitir que los caminos pasen por un nodo intermedio k y comprobar si pasar por k es más barato que ir directamente.

El orden de los bucles importa

El bucle externo es k, el punto intermedio elegido. Los bucles internos i y j prueban cada par con respecto a ese punto intermedio.

for k in range(n):
  for i in range(n):
    for j in range(n):

El paso de relajación

Para cada par, relaje pasando por k: si ir de i a k y luego a j es más corto, actualice dist[i][j] con ese costo combinado.

if dist[i][k] + dist[k][j] < dist[i][j]:
    dist[i][j] = dist[i][k] + dist[k][j]

Por qué k va fuera

Cuando termina k, todos los pares pueden usar nodos intermedios hasta k. Colocar k en el bucle externo mantiene correcta esa garantía.

Las aristas negativas no son un problema

Floyd-Warshall admite aristas negativas, pero no ciclos negativos. Un ciclo negativo deja alguna entrada de la diagonal por debajo de cero.

El tiempo de ejecución

Tres bucles sobre n nodos producen un tiempo de O(n^3) y un espacio de O(n^2), algo práctico solo cuando n se mantiene en unos pocos cientos.

Cuándo elegirlo

Elija Floyd-Warshall cuando el grafo sea pequeño y denso y realmente necesite la distancia entre cada par, no solo desde un único origen.

Comprobación rápida

¿Qué bucle debe ser el externo en Floyd-Warshall?

Repaso: Floyd-Warshall

Inicialice una matriz, establezca la diagonal en cero y luego recorra k, i, j para relajar pasando por k. Caminos más cortos entre todos los pares en O(n^3). 🧮

Gratis para empezar

Aprende Python con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Floyd-Warshall para todos los pares» es gratis?

Sí — el texto completo de «Floyd-Warshall para todos los pares» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Competitive Programming Academy, actualiza a CoddyKit PRO. El curso de Competitive Programming Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Floyd-Warshall para todos los pares»?

Encuentre caminos mínimos entre cada par Practicas Competitive Programming Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Competitive Programming Academy?

No se requiere experiencia previa. Competitive Programming Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Floyd-Warshall para todos los pares»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Competitive Programming Academy?

Sí. Cada lección de Competitive Programming Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Dijkstra con un heap
  2. BFS 0-1 con una deque
  3. Bellman-Ford y aristas negativas
  4. Floyd-Warshall para todos los pares
← Volver a Competitive Programming Academy