Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 3 KB
program indiana;
type TFal = record
X1,Y1:longint;
X2,Y2:longint;
L:longint;
F,V:boolean;
end;
var t:array of TFal;
D:array of longint;
tav:array of array of longint;
N:longint;
function pita(x1,y1,x2,y2:longint):longint;
begin
pita := (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
end;
function D2(ai,bi:longint):longint;
var a,b:TFal;
begin
a:=t[ai];
b:=t[bi];
if ((a.V) and (b.V)) then
begin
if a.X2 < b.X1 then D2:=pita(a.X2,a.Y2,b.X1,b.Y1) else
if b.X2 < a.X1 then D2:=pita(b.X2,b.Y2,a.X1,a.Y1) else
D2:=sqr(abs(a.y1-b.y1));
end else
if ((a.F) and (b.F)) then
begin
if a.Y2 < b.Y1 then D2:=pita(a.X2,a.Y2,b.X1,b.Y1) else
if b.Y2 < a.Y1 then D2:=pita(b.X2,b.Y2,a.X1,a.Y1) else
D2:=sqr(abs(a.x1-b.x1));
end else
if ((a.V) and (b.F)) then
begin
if b.X1<a.X1 then
begin
if a.Y1<b.y1 then D2:=pita(a.x1,a.y1,b.x1,b.y1) else
if b.Y2<a.y1 then D2:=pita(a.x1,a.y1,b.x2,b.y2) else
D2:=sqr(abs(a.x1-b.x1));
end else
if a.X2<b.X1 then
begin
if a.Y2<b.y1 then D2:=pita(a.x2,a.y2,b.x1,b.y1) else
if b.Y2<a.y2 then D2:=pita(a.x2,a.y2,b.x2,b.y2) else
D2:=sqr(abs(a.x2-b.x1));
end
else
begin
if a.y1<b.y1 then D2:=sqr(abs(a.y1-b.y1)) else
if a.y1>b.y2 then D2:=sqr(abs(a.y1-b.y2)) else
D2:=0;
end;
end;
if ((a.F) and (b.V)) then
begin
if a.X1<b.X1 then
begin
if b.Y1<a.y1 then D2:=pita(b.x1,b.y1,a.x1,a.y1) else
if a.Y2<b.y1 then D2:=pita(b.x1,b.y1,a.x2,a.y2) else
D2:=sqr(abs(b.x1-a.x1));
end else
if b.X2<a.X1 then
begin
if b.Y2<a.y1 then D2:=pita(b.x2,b.y2,a.x1,a.y1) else
if a.Y2<b.y2 then D2:=pita(b.x2,b.y2,a.x2,a.y2) else
D2:=sqr(abs(b.x2-a.x1));
end
else
begin
if b.y1<a.y1 then D2:=sqr(abs(b.y1-a.y1)) else
if b.y1>a.y2 then D2:=sqr(abs(b.y1-a.y2)) else
D2:=0;
end;
end;
end;
function load:boolean;
var i,j:longint;
X0,Y0,L0:longint;
begin
readln(N);
load:=true;
if N>0 then
begin
setlength(t,N+1);
setlength(D,N+1);
setlength(tav,N+1,N+1);
for i:=1 to N do
begin
readln(X0,Y0,L0);
with(t[i])do
begin
X1 := X0;
Y1 := Y0;
L := abs(L0);
V := (L0>0);
F := not(V);
X2:=X1;
Y2:=Y1;
if V then X2:=X2+L
else Y2:=Y2+L;
end;
D[i]:=maxlongint;
end;
for i:=1 to N do
for j:=1 to N do
tav[i][j]:=D2(i,j);
end
else
begin
load:=false;
end;
end;
function maxof(x,y:longint):longint;
begin
if x>y then maxof:=x else maxof:=y;
end;
procedure dijkstra;
var vege:boolean;
i,j:longint;
uj:longint;
begin
repeat
vege:=true;
for i:=1 to N do
for j:=1 to N do
if i<>j then
begin
uj:=maxof(D[i],tav[i][j]);
if uj < D[j] then
begin
D[j]:=uj;
vege:=false;
end;
end;
until vege;
end;
procedure dump;
var i,j:longint;
begin
for i:=1 to N do
writeln(i:2,'(',t[i].x1,',',t[i].y1,')-(',t[i].x2,',',t[i].y2,') = [',t[i].L,',',t[i].V,']');
writeln;
for i:=1 to N-1 do
for j:=i+1 to N do
begin
writeln('D2( ',i:2,',',j:2,' ) = ',D2(i,j));
end;
end;
begin
while(load)do
begin
D[1]:=0;
dijkstra;
writeln(sqrt(D[2]):0:2);
end;
end.