Floyd-Warshall para Todos os Pares
Encontre caminhos mínimos entre todos os pares.
Floyd-Warshall para Todos os Pares é uma aula grátis de Competitive Programming Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Competitive Programming Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Competitive Programming Academy inclui 4 aulas no total.
Todos os pares de uma vez
Às vezes, você precisa do caminho mínimo entre cada par de nós, e não apenas a partir de uma origem. Esse é o problema de todos os pares.
Conheça Floyd-Warshall
O Floyd-Warshall preenche uma tabela completa de distâncias para todos os pares com três laços aninhados organizados e quase nenhuma preparação.
A matriz de distâncias
Use uma matriz em que dist[i][j] é o melhor custo conhecido de i até j. Inicialize-a com as arestas diretas fornecidas.
dist = [[INF] * n for _ in range(n)]Defina a diagonal
Todo nó alcança a si mesmo gratuitamente, então defina a diagonal dist[i][i] como zero antes de começar os relaxamentos.
for i in range(n):
dist[i][i] = 0A ideia do intermediário
O truque é permitir que os caminhos passem por um nó intermediário k e verificar se passar por k é mais barato que ir diretamente.
A ordem dos laços importa
O laço externo é k, o ponto intermediário escolhido. Os laços internos i e j testam cada par em relação a esse ponto intermediário.
for k in range(n):
for i in range(n):
for j in range(n):A etapa de relaxamento
Para cada par, relaxe passando por k: se ir de i até k e depois até j for mais curto, atualize dist[i][j] para esse custo combinado.
if dist[i][k] + dist[k][j] < dist[i][j]:
dist[i][j] = dist[i][k] + dist[k][j]Por que k fica do lado de fora
Quando k termina, todos os pares podem usar pontos intermediários até k. Colocar k no laço mais externo mantém essa garantia correta.
Arestas negativas não são um problema
O Floyd-Warshall aceita arestas negativas, mas não ciclos negativos. Um ciclo negativo faz alguma entrada da diagonal ficar abaixo de zero.
O tempo de execução
Três laços sobre n nós resultam em tempo O(n^3) e espaço O(n^2), sendo viável apenas quando n permanece na casa de algumas centenas.
Quando escolhê-lo
Escolha o Floyd-Warshall quando o grafo for pequeno e denso e você realmente precisar da distância entre cada par, não apenas das distâncias a partir de uma origem.
Verificação rápida
Qual laço deve ser o mais externo no Floyd-Warshall?
Revisão: Floyd-Warshall
Inicialize uma matriz, defina a diagonal como zero e percorra k, i, j, relaxando através de k. Caminhos mínimos entre todos os pares em O(n^3). 🧮
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Floyd-Warshall para Todos os Pares” é grátis?
Sim — o texto completo de “Floyd-Warshall para Todos os Pares” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Competitive Programming Academy, atualize para CoddyKit PRO. O curso de Competitive Programming Academy inclui 4 aulas no total.
O que vou aprender em “Floyd-Warshall para Todos os Pares”?
Encontre caminhos mínimos entre todos os pares. Você pratica Competitive Programming Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Competitive Programming Academy?
Nenhuma experiência prévia é necessária. Competitive Programming Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Floyd-Warshall para Todos os Pares”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Competitive Programming Academy?
Sim. Cada aula de Competitive Programming Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Dijkstra com uma Heap
- BFS 0-1 com uma Deque
- Bellman-Ford e Arestas Negativas
- Floyd-Warshall para Todos os Pares