{ P-I-4 Grafomat
Jakub Ruzicka
ctete grafomat.txt }
var x:0..2; { vstup }
y:0..1 = 0; { vystup }
z:0..3 = 0; { prosel pomocny signal ? pokud ano, odkud prisel ? (0 - neprisel, 1..3 - cislo mistni hrany odkud prisel)}
i:1..3; { iteracni promenna }
begin
case x of
0:begin { vrchol bez vstupniho oznaceni }
if (y = 0) then { nejsme oznaceni jako vrchol na nejkratsi ceste }
begin
if (z = 0) then { nepresel pres nas jeste ani pomocny singal }
begin
i:=1;
while (i <= 3) AND (S[i].z = 0) do i:=i+1;
if i <= 3 then z:=i; { najdeme-li oznaceneho souseda, zapiseme si jeho mistni hranu a nehledame dalsi }
end
else { vyhlizime y = 1 u vrcholu, ktere si od nas vzaly pomocny sigal }
begin
i:=1;
while (i <= 3) AND NOT ( (S[i].y >= 1) AND (S[i].z = P[i]) ) do i:=i+1; { ma soused y = 1 a vzal si pomocny signal od nas ? }
if i <= 3 then y:=1;
end;
end;
stop; { vsechny x = 0 vrcholy vzdy souhlasi se zastavenim }
end;
1:begin { vrchol oznaceny 1 }
if z = 0 then z := 1; { vrchol vzdy vysila pomocny signal }
i:=1;
while (i <= 3) AND ( (S[i].y = 1 ) OR (S[i].x = 2) ) do i:=i+1;
if i <= 3 then stop; { nejkratsi cesta je vyznacena, nebo jsou 1 a 2 hned vedle sebe - koncime }
end;
2:begin { vrchol oznaceny 2 }
if y<1 then y:=1; { vrchol je vzdy 1 }
if z<1 then { jeste k nam nedosel pomocny signal ? }
begin
i:=3;
while (i <= 3) AND (S[i].z = 0) do i:=i+1; { hledame souseda oznaceneho pomocnym signalem }
if i <= 3 then z:=i; { najdeme-li oznaceneho souseda, delame, ze jsme oznaceni od nej }
end else
stop; { dosel, takze zastavujeme a cekame, az doje y = 1 na zacatek. }
end;
end;
end.