program na;                         (* Nearest Addition, Thomas Klein  1999 *)
uses graph,tsp;
var anfang:stadtnr;

procedure naddition(anfang:stadtnr;var w:weg);
 (* Nearest Addition mit Startpunkt anfang *)
 var m,n,i,j,k:stadtnr;
     mm,l:entfernung;
 begin
  w:=chr(anfang)+chr(anfang);
  while length(w)<=stadtanzahl do begin
   mm:=maxentfernung;
   for i:=1 to length(w)-1 do begin
    m:=ord(w[i]);
    for j:=1 to stadtanzahl do
     if pos(chr(j),w)=0 then begin
      l:=entftab[m,j];
      if l<mm then begin mm:=l; n:=j; k:=i; end;
     end;
   end;
   insert(chr(n),w,k+1);
  end;
 end;

begin
 if tspinit('TSP: Nearest Addition','Berechnen') then
  while tspmenue([0..255]) do begin
   meldung('Startpunkt w„hlen!',green,white);
   anfang:=stadtwahl(255);
   start; naddition(anfang,aktuell); stop;
   wegkarte(aktuell,true,brown,yellow);
   laenge_aus(aktuell); zeit_aus(true);
  end;
 closegraph;
end.
