Informatika gyűjtemény

Egy szinttel feljebb pt_regiok.pas

2004050607080910

NézetNyomtat

pt_regiok.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
program regiok;

const maxN = 100;

type  TNum    = integer;
      PVaros  = ^TVaros;
      TVaros  = object
                  x,y:TNum;
                  index:TNum;
                  pre:Pvaros;
                  function root:PVaros;
                end;
      TTerkep = array[1..maxN]of PVaros;
      
var v:TTerkep;      
    t,n:TNum;
  
function TVaros.root:PVaros;
begin
  if (pre^.index=index) then root:=pre else
    begin
      pre:=pre^.root;
      root:=pre;
    end;
end;

procedure load;
var i:TNum;
begin
  readln(n,t);
  for i:=1 to N do
    begin
      new(v[i]);
      v[i]^.index:=i;
      v[i]^.pre:=v[i];
      readln(v[i]^.x,v[i]^.y);
    end;  
end;

procedure gcoll;
var i:TNum;
begin
  for i:=1 to N do dispose(v[i]);
end;

function d(a,b:PVaros):TNum;
begin
  d:=abs(a^.x-b^.x) + abs(a^.y-b^.y) 
end;

procedure main;
var i,j:TNum;
begin
  for i:=1 to N-1 do
    for j:=i+1 to N do
      begin
        if (d(v[i],v[j])<=T)and(v[j]^.root^.index <> v[i]^.root^.index) then
          v[j]^.root^.pre:=v[i];
      end;
end;

function printc(w:boolean):TNum;
var i,j,r:TNum;
    b:boolean;
begin
  r:=0;
  for i:=1 to N do
    begin
      b:=false;
      for j:=1 to N do
        if v[j]^.root^.index = i then
          begin
            if then write(j,' ');
            b:=true;
          end;
      if then
        begin
          inc(r);
          if then writeln;
        end;
    end;
  printc:=r;
end;

procedure print;
begin
  writeln(printc(false));
  printc(true);
end;

begin
  load;
  main;
  print;
  gcoll;
end.of.program
(Vissza)