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.
egin<br />
No[Noi].ci := I1;<br />
No[Noi].cj := J1;<br />
end;<br />
If No[Nof].ci = 0 Then<br />
begin<br />
No[Nof].ci := I2;<br />
No[Nof].cj := J2;<br />
end;<br />
end;<br />
CloseFile(Re<strong>de</strong>);<br />
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 />
168