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.
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