-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeistras.pas
122 lines (114 loc) · 2.19 KB
/
meistras.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
program mestras;
type
TG = array [0 .. 251, 0 .. 251] of boolean;
Teil = array [1 .. 252] of integer;
var
g : TG;
viso : integer;
procedure nuskaitymas (var viso : integer; var G : TG);
var
f : text;
pgx, pgy,
pg, ck : integer;
begin
assign (f, 'meistras.dat');
reset (f);
readln (f, viso, pg);
for pgx := 0 to viso + 1 do
for pgy := 0 to viso + 1 do
g [pgx, pgy] := false;
for ck := 1 to viso do
begin
readln (f, pgx, pgy);
g [pgx, pgy] := true
end;
close (f)
end;
procedure PradPab (viso : Integer; var G : Tg);
var
ckx, cky : integer;
pg : boolean;
begin
for ckY := 1 to viso do
begin
pg := true;
for ckx := 1 to viso do
if g [ckx, cky] then
begin
pg := false;
break
end;
if pg then g [0, cky] := true
end;
for ckx := 1 to viso do
begin
pg := true;
for cky := 1 to viso do
if g [ckx, cky] then
begin
pg := false;
break
end;
if pg then g [ckx, viso + 1] := true
end
end;
procedure rasymas (ilg : integer; var eil : Teil);
var
ck : Integer;
f : text;
begin
assign (f, 'meistras.rez');
rewrite (f);
for ck := 2 to ilg - 1 do
write (f, eil [ck], ' ');
close (f)
end;
function galima (v, nr : integer; var G : TG) : boolean;
var
ok : boolean;
ck : integer;
begin
ok := true;
for ck := 0 to viso + 1 do
if (v <> ck) and (g [ck, nr]) then
begin
ok := false;
break
end;
galima := ok
end;
procedure keliauk (viso : integer; g : TG);
var
eil : Teil;
eita : array [0 .. 251] of boolean;
ck, pg,
uod, gal : integer;
begin
for ck := 1 to 251 do
eita [ck] := false;
gal := 1;
uod := 2;
eil [1] := 0;
eita [0] := true;
while gal < uod do
begin
for ck := 0 to viso do
if g [eil [gal], ck] then
begin
g [eil [gal], ck] := false;
if not eita [ck] and galima (eil [gal], ck, g) then
begin
eil [uod] := ck;
eita [ck] := true;
inc (uod)
end
end;
inc (gal)
end;
rasymas (uod, eil)
end;
begin
nuskaitymas (viso, g);
PradPab (viso, g);
Keliauk (viso, g)
end.