09.05.2013 Views

Algoritmos Heurísticos de Cobertura de Arcos

Algoritmos Heurísticos de Cobertura de Arcos

Algoritmos Heurísticos de Cobertura de Arcos

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!