в загальній площі кімнати}
B [i, j]: = true; {Відзначаємо, що в поточній клітині ми вже були}
Solve (i + X [k], j + Y [k]); {переходимо в наступну клітину}
B [i, j]: = False; {робимо клітку, в якій останній разу були не переглянутої, щоб розглянути інші варіанти ходу з неї в іншу клітку}
end;
end
Else A [i, j]: = A [i, j]-Degree2 (k);
Dec (k);
end;
end;
procedure Prosmotr; {дана процедура відзначає вже переглянуту кімнату}
var i, j: integer;
begin
For i: = 1 to m do
For j: = 1 to p do
If A [i, j] = 0 then B [i, j]: = True;
end;
begin
clrscr;
Init ('A: museum.txt');
rooms: = 0;
For indexX: = 1 to m do {шукаємо що раніше не переглянуту клітку}
For indexY: = 1 to p do
If not B [indexX, indexY] Then
begin
col: = 1;
Inc (rooms);
Solve (indexX, indexY);
Write (Col, ''); {висновок площі щойно переглянутої кімнати}
Prosmotr;
end;
WriteLn;
WriteLn (rooms); {Виведення кількості кімнат}
readkey;
end.
2 Пірат в підземеллі.
uses crt;
Const k = 100;
dx: array [1 .. 4] of Integer = (1,0, -1,0); {масив координат переміщення пірата}
dy: array [1 .. 4] of Integer = (0,1,0, -1);
Type mas = array [0 .. k, 0 .. k] of Integer;
mas2 = array [0 .. k, 0 .. k] of boolean; {масив логічного типу для позначки кімнат, в яких пірат вже побував}
var n, m, sum1, sum, col: integer;
A: mas;
B: mas2;
Procedure Init (z: string); {ініціалізація вхідних даних}
Var f: text;
i, j: integer;
Begin
Assign (f, z);
Reset (f);
FillChar (A, SizeOf (A), 0);
FillChar (B, SizeOf (B), true);
ReadLn (f, n, m, col);
for i: = 1 to n do
begin
for j: = 1 to m do
Read (f, A [i, j]);
ReadLn (f);
end;
Close (f);
End;
Procedure Solve (x, y, p: integer);
var i, j: integer;
begin
If p = 0 then begin
If sum> sum1 then {порівнюємо поточну вартість набраних каменів зі стоімоть набраних раніше, з метою збільшення вартості}
sum1: = sum;
end
Else begin
For i: = 1 to 4 do
If (A [x + dx [i], y + dy [i]]> 0) and B [x + dx [i], y + dy [i]] then {переглядаємо варіанти переходу пірата в іншу кімнату, перевіряючи чи не був пірат в ній до цього}
begin
sum: = sum + A [x + dx [i], y + dy [i]]; {додаємо вартість каменю, що знаходиться в даній кімнаті до сумарної вартості}
B [x + dx [i], y + dy [i]]: = false; {відзначаємо, що в даній кімнаті ми вже були}
Solve (x + dx [i], y + dy [i], p-1);
sum: = sum-A [x + dx [i], y + dy [i]]; <...