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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

MA1:=0;<br />

ME1:=0;<br />

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

Begin<br />

Readln(Re<strong>de</strong>,a,Tip,Noi,I,J,Nof,I1,J1,d,Requerido);<br />

NoInicioLink:=a;<br />

Link[a].From:=Noi;<br />

Link[a].Too:=Nof;<br />

Link[a].Custo:=d;<br />

Link[a].Req:=Requerido;<br />

If Tip=1<br />

Then begin<br />

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

Link[a].Arc.Noi:=NoInicioLink;<br />

NoFinalArco:=NoFinalArco+1;<br />

Link[a].Arc.Nof:= NoFinalArco;<br />

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

L[Link[a].Arc.Noi, Link[a].Arc.Nof] := d;<br />

L[Link[a].Arc.Noi, Link[a].Arc.Noi] := 0;<br />

MA1:=MA1+1;<br />

end<br />

Else begin<br />

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

Link[a].Arc.Noi:=NoInicioLink;<br />

NoFinalAresta:=NoFinalAresta+1;<br />

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

b:=NoFinalAresta;<br />

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

Link[b].Tipo:=2;<br />

Link[b].From:=Nof;<br />

Link[b].Too:=Noi;<br />

Link[b].Custo:=d;<br />

Link[b].Req:=Requerido;<br />

Link[b].Arc.Noi:= NoAux+1;<br />

Link[b].Arc.Nof:= NoAux+2;<br />

NoAux:=NoAux+2;<br />

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

ME1:=ME1+1;<br />

L[Link[b].Arc.Noi, Link[b].Arc.Nof] := d;<br />

L[Link[b].Arc.Noi, Link[b].Arc.Noi] := 0;<br />

L[Link[a].Arc.Noi, Link[a].Arc.Nof] := d;<br />

L[Link[a].Arc.Noi, Link[a].Arc.Noi] := 0;<br />

end;<br />

End;<br />

CloseFile(Re<strong>de</strong>);<br />

If (MA1MA) Or (ME1ME) Then<br />

begin<br />

Application.messagebox('Número <strong>de</strong> arcos ou arestas incorreto','Programa será fechado!',MB_OK);<br />

Halt;<br />

end;<br />

End;<br />

Procedure DefineInicioEFimDoRoteiro(Edit11,Edit12:TEdit);<br />

// Este procedimento lê os nós especificados para o início e fim da rota<br />

// A partir disso cria um novo arco artificial (FimRota, InicioRota)<br />

// com custo igual ao valor usado como infinito (-MenosInf).<br />

// O arco artificial é criado, mesmo se FimRota = InicioRota.<br />

// Gera um novo arquivo ArqTemp que é igual ao arquivo original,<br />

// só que com um arco a mais (M1+1 links e MA+1 arcos)<br />

// No final da primeira linha <strong>de</strong> ArqTemp, <strong>de</strong>pois dos dados gerais do grafo,<br />

// aparece o símbolo # e <strong>de</strong>pois os nós inicial e final da rota.<br />

Var Caractere: Char;<br />

II,NoRepetidoi,NoRepetidoj: Integer;<br />

InicioRotaCoordI,InicioRotaCoordJ,<br />

153

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

Saved successfully!

Ooh no, something went wrong!