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.

Re<strong>de</strong>,Re<strong>de</strong>Orig,Re<strong>de</strong>Temp:TextFile;<br />

Arq,ArqNome,NomeAbr,ArqAux,ArqNomeTxt,ArqTemp:String;<br />

Inf,MenosInf,Penalida<strong>de</strong>:Integer;<br />

InicioRota, FimRota: Integer;<br />

ArqErrado,Rural:Boolean;<br />

Const<br />

NumMaxNos=4000;<br />

Procedure ReduzirRuralPostman;<br />

// Esta rotina é chamada se o grafo possuir pelo menos um link<br />

// não requerido. Ele reduz a matriz final, <strong>de</strong> acordo com os links<br />

// requeridos e atualiza os valores <strong>de</strong> M1, MA e ME (links, arcos e<br />

// arestas requeridos + arco artificial)<br />

var a,I,c,b,J,II,JJ:Integer;<br />

NoFinalAresta: Integer;<br />

MAR,MER,M1R,M2R:Integer;<br />

Or<strong>de</strong>mLinkR: Integer;<br />

Cont: Array[1..2000] of integer;<br />

Begin<br />

// M1R: Número <strong>de</strong> links requeridos do grafo original M1R= MAR+MER<br />

// MAR: Número <strong>de</strong> <strong>Arcos</strong> " " "<br />

// MER: Numero <strong>de</strong> Arestas " " "<br />

MAR:=0;<br />

MER:=0;<br />

For I:=1 To M1 Do<br />

If Link[I].Req=1 then<br />

begin<br />

If Link[I].Tipo=1 then MAR:=MAR+1;<br />

If Link[I].Tipo=0 then MER:=MER+1;<br />

end;<br />

M1R:=MAR+MER;<br />

M2R:=M1R+MER;<br />

Or<strong>de</strong>mLinkR:=0;<br />

NoFinalAresta:=M1R;<br />

For a:=1 To M1 Do // Criando a nova correspon<strong>de</strong>ncia entre<br />

Begin // o link a e seu respectivo<br />

If Link[a].Req=1 // Link[a].ArcContra, armazenando no<br />

then Or<strong>de</strong>mLinkR:=Or<strong>de</strong>mLinkR+1; // vetor Link[a].ArcContraReq<br />

If Link[a].Tipo=1<br />

Then begin<br />

If Link[a].Req=1<br />

Then Link[a].ArcContraReq:=-1<br />

Else Link[a].ArcContraReq:=0;<br />

end<br />

Else begin<br />

c:=Link[a].ArcContra;<br />

If Link[a].Req=1<br />

Then begin<br />

NoFinalAresta:=NoFinalAresta+1;<br />

Link[a].ArcContraReq:=NoFinalAresta;<br />

Link[c].ArcContraReq:= Or<strong>de</strong>mLinkR;<br />

end<br />

else begin<br />

Link[a].ArcContraReq:=0;<br />

Link[c].ArcContraReq:=0;<br />

end;<br />

end;<br />

End;<br />

// For I:=1 To M2 Do<br />

// Cont[I]:= Link[I].ArcContraReq;<br />

//Eliminar linhas/colunas não requeridas da matriz L<br />

II:=0;<br />

For I:=1 to M2 Do<br />

begin<br />

If Link[I].ArcContraReq 0 Then<br />

151

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

Saved successfully!

Ooh no, something went wrong!