Enviado em 12/10/2012 - 16:00h
Olá a todos,
Pessoal, estou aprendendo em aula o algoritmo de Floyd, usado pra roteamento em redes e estou tendo dificuldades em escrever ele em VisualG (sei que é antiga essa ferramenta, mas acho ela bem legal).
Eu preciso fazer a matriz carregar os valores diretamente, sem ter de ficar digitando 1 por 1. A ideia é fazer com que o algoritmo pergunte "Digite a rota inicial" e depois "Digite o destino" e depois mostre na tela os roteadores que passou.
Eis o algoritmo:
Eu não sei se dá pra por uma imagem da função aqui n fórum. =(
Também não consegui entender o que é esse "k" no algoritmo, estou tentando entender. =(
A matriz é 6x6, tamanho fixo.
Agradeço se alguém puder se manifestar a respeito.
Obrigado!
Pessoal, estou aprendendo em aula o algoritmo de Floyd, usado pra roteamento em redes e estou tendo dificuldades em escrever ele em VisualG (sei que é antiga essa ferramenta, mas acho ela bem legal).
Eu preciso fazer a matriz carregar os valores diretamente, sem ter de ficar digitando 1 por 1. A ideia é fazer com que o algoritmo pergunte "Digite a rota inicial" e depois "Digite o destino" e depois mostre na tela os roteadores que passou.
Eis o algoritmo:
E aqui mostro o que já consegui passar pro VisualG:
Entrada: Matriz de Custos D
Saída: A -> Matriz com os comprimentos dos menores caminhos
R -> Fornece o vértice k que é o primeiro a ser visitado no menor caminho de vi até vj.
Início
Para i =1 até n Faça
Para j = 1 até n Faça
A[i,j] <- D[i,j];
R[i,j] <- j;
Para i = 1 até n Faça
A[i,i] <- 0;
Para k = 1 até n Faça
Para i = 1 até n Faça
Para j = 1 até n Faça
Se A[i,k] + A[k,j] < A[i,j] então {aplica-se a função aqui (não consigo escrever aqui)
A[i,j] <- A[i,k]+A[k,j];
R[i,j] <- k;
Fim
a função do algoritmo de Floyd, tentarei "ditar" aqui: d ij elevado a k = MIN[d ij elevado a k-1,(d ik elevado a k-1 + d kj elevado a k-1)]
algoritmo "floyd"
//Entrada: Matriz de custos D
//Saída: A -> Matriz com os componentes dos menores caminhos
// R -> Fornece o vértice k que é o primeiro a ser visitado no menor caminho de vi até vj
var
R:vetor[1..6,1..6] de inteiro
A:vetor[1..6,1..6] de inteiro
D:vetor[1..6,1..6] de inteiro
i,j,k:inteiro
inicio
para i de 1 ate 6 faca
para j de 1 ate 6 faca
A[i,j] <- D[i,j]
R[i,j] <- j
fimpara
para i de 1 ate 6 faca
A[i,i] <- 0
fimpara
para k de 1 ate 6 faca
para i de 1 ate 6 faca
para j de 1 ate 6 faca
se A[i,k] + A[k,j] < A[i,j] entao //aplica-se a função
A[i,j] <- A[i,k] + A[k,j]
R[i,j] <- k
fimse
fimpara
fimpara
fimpara
fimpara
fimalgoritmo
Eu não sei se dá pra por uma imagem da função aqui n fórum. =(
Também não consegui entender o que é esse "k" no algoritmo, estou tentando entender. =(
A matriz é 6x6, tamanho fixo.
Agradeço se alguém puder se manifestar a respeito.
Obrigado!