Algoritmos Heurísticos de Cobertura de Arcos
Algoritmos Heurísticos de Cobertura de Arcos
Algoritmos Heurísticos de Cobertura de Arcos
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
AssignFile(Roteiro,ArqSol); //Arquivo solução<br />
Reset(Roteiro);<br />
For II := 1 To 12 do<br />
Readln(Roteiro,Tipo); //<br />
II:=0;<br />
While Not EoF (Roteiro) do<br />
Begin<br />
II:=II+1;;<br />
Read(Roteiro,Noi);<br />
Read(Roteiro,Nof);<br />
Repeat Read(Roteiro,Tipo) Until Tipo > ' ';<br />
Readln(Roteiro,a);<br />
Rota[II].Arc := a; //Rota é o vetor que contem a<br />
Rota[II].Tipo:=Tipo; //sequencia dos links na solucao<br />
Rota[II].Noi:=Noi; //Tipo= + :aresta percorrido no sentido normal<br />
// - :aresta percorrido no sentido contrário<br />
// > :arco<br />
// D :trecho duplicado que po<strong>de</strong> ser uma ca<strong>de</strong>ia<br />
Rota[II].Nof:=Nof;<br />
Rota[II].Or<strong>de</strong>m:=0; // numero das vezes que até o momento o link apareceu no roteiro<br />
Rota[II].FreqTotal:=0; // numero total das vezes que o link é percorrido no roteiro<br />
end;<br />
Rota[II+1] := Rota[1];<br />
CloseFile(Roteiro);<br />
NumLink:=II; // NumLink: numero total <strong>de</strong> link / ca<strong>de</strong>ias duplicadas<br />
II:=0;<br />
If InicioRotaFimRota<br />
Then<br />
begin<br />
Repeat // procurando o link que começa <strong>de</strong>pois<br />
II:=II+1; // do Arco artificial (FimRota, InicioRota)<br />
If II>NumLink then Exit;<br />
Rota[NumLink+II]:=Rota[II];<br />
Until (Rota[II].Noi = FimRota) and<br />
(Rota[II].Nof = InicioRota) and<br />
(Rota[II].Tipo = '>');<br />
NumLink:=NumLink-1; // Excluindo o arco artificial<br />
For i:= 1 to NumLink do // Reor<strong>de</strong>nando a rota, para começar do nó InicioRota<br />
Rota[i]:=Rota[i+II];<br />
end<br />
else<br />
begin<br />
Repeat // procurando o link que começa com o nó InicioRota<br />
II:=II+1;<br />
If II>NumLink then Exit;<br />
Rota[NumLink+II]:=Rota[II];<br />
Until Rota[II].Noi = InicioRota;<br />
For i:= 1 to NumLink do // Reor<strong>de</strong>nando a rota, para começar do nó InicioRota<br />
Rota[i]:=Rota[i+II-1];<br />
end;<br />
For II := 1 to NumLink do // tracando um trecho duplicado pelo link original<br />
begin // <strong>de</strong> modo que primeiro o trecho original seja percorrido<br />
If ((Rota[II].Tipo = 'D') and (II < NumLink)) then<br />
begin<br />
Noi:=Rota[II].Noi;<br />
Nof:=Rota[II].Nof;<br />
For i:=II+1 to NumLink do<br />
If ((Noi=Rota[i].Noi) and (Nof=Rota[i].Nof))<br />
then If Rota[i].Tipo 'D'<br />
then begin<br />
RegTemp:= Rota[II];<br />
Rota[II]:=Rota[i];<br />
Rota[i]:=RegTemp;<br />
end;<br />
end;<br />
171