Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aluno:
Aluno:
Prtica
clear peso_no; // Zerar as variveis para ter certeza que comeam com zero
clear fora;
clear no_pai;
clear rota;
peso_no=[inf inf inf inf inf inf]; //define o peso de incio de todos os ns como infinito
peso_no(no_inicio)=0; //zera o peso do n incio, porque o peso de sair dele e chegar a ele
//mesmo zero.
fora=[0 0 0 0 0 0]; //define o vetor fora, que ir dizer se um n est fora da rota ou no
no_pai=[0 0 0 0 0 0]; //seta todas as componentes do no_pai para zero
no_pai(no_inicio)=no_inicio; //o n_pai do n_inicio o prprio n_inicio
no_atual = no_inicio; //inicialmente o n atual o n_inicio
while no_atual ~=0 do //a rotina abaixo ocorrer enquanto o n_atual for diferente de zero
for j= 1:length(lig(no_atual).no) do // J ir variar de 1 at o tamanho do vetor LIG do n
//atual
if peso(no_atual).lig(j)+peso_no(no_atual) < peso_no(lig(no_atual).no(j)) then
//a rotina abaixo ser executada se o peso da ligao do n atual
//mais o peso j armazenado nele mesmo for menor que o peso da ligao
//do n no n atual
peso_no(lig(no_atual).no(j)) = peso(no_atual).lig(j)+peso_no(no_atual);
// caso o peso seja menor, o novo peso armazenado
no_pai(lig(no_atual).no(j))=no_atual; //o n pai recebe o n anterior para ficar
// com a rota mais curta
end //encerra a rotina do if
end //encerra a rotina do for
fora(no_atual)=1; //o vetor fora recebe 1 na posio do n atual, indicando que este n
//j foi analisado e no precisa ser novamente analisado
for i=1:length(lig(no_atual).no) do // i vai variar de 1 at o tamanho do vetor LIG do n
//atual, para verificar quais ns esto ligados
if fora(lig(no_atual).no(i))==0 then //se o n atual no estiver fora da anlise, continua
//e entra no comando do if
no_atual = lig(no_atual).no(i); //o n atual recebe as ligaes existentes no n de
//analise
break //para a anlise e volta para o prximo valor de i
end //encerra a rotina do if
end //encerra a rotina do for
if sum(fora) == length(nos) then //compara se o nmero de ns que esto fora da
//anlise igual ao nmero total de ns.
no_atual=0; //se o no_atual for igual a zero , indica que todos os ns foram analisados
end //encerra a rotina if
end //encerra a rotina while