Вопрос по информатике:
ИВТ/ 9 КЛАСС/ ХЕЕЕЛП/ 30 БАЛЛОВ
Лабиринт
Терминатор T101 заблудился в лабиринтах подвальных помещений компании
Cyberdyne Systems. Подвал представляет собой прямоугольную площадку размена NxM клеток. Каждая клетка может быть проходимой, а может быть непроходимой. У терминатора есть план подвала, в котором проходимые клетки отмечены точками (“.”), непроходимые –иксами (символ “x”), текущее положение терминатора отмечено символом “+”. Чтобы организовать поиски выхода, терминатор должен отметить на своем плане все проходимые клетки, в которые он может попасть и подсчитать их количество (включая клетку, на которой он находится в данный момент). Он может ходить только по проходимым клеткам,
совершая каждый переход на одну клетку вверх, вниз, вправо или влево. При этом он не может выходить за границы заданного прямоугольника.
Входные данные
В первой строке входного файла задается через пробел два числа N и M — размеры подвала,
причем 1 ≤ N ≤ 100, 1 ≤ M ≤ 100. В последующих N строках вводится план лабиринта — по
M символов в строке.
Выходные данные
В выходной файл выведите единственное число — количество достижимых терминатором клеток.
Пример входного файла
4 6
.x.x..
.xxx..
....xx
x.+.x.
Пример выходного файла
9
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок - бесплатно!
- 08.08.2018 08:21
- Информатика
- remove_red_eye 19996
- thumb_up 44
Ответы и объяснения 1
Const
max_length = 10;
type
arr = array [0..max_length, 0..max_length] of byte;
var
a: arr;
i, j, n, m, k, x, y: byte;
c: char;
f: text;
//procedure PrintMatrix(a: arr);
//begin
// for var i := 0 to max_length do
// begin
// writeln;
// for var j := 0 to max_length do
// write(a[i, j], ' ');
// end;
// writeln;
//end;
procedure labirint(i, j: byte);
begin
if (i = 0) and (j = 0) and (a[i, j] = 0) then begin
a[i, j] := 1;
k := k + 1;
labirint(i, j - 1);
labirint(i, j + 1);
labirint(i - 1, j);
labirint(i + 1, j);
end;
end;
begin
Assign(f, 'input.txt');
Reset(f);
readln(f, n, m);
for i := 0 to n do
begin
for j := 0 to m do
begin
read(f, c);
case c of
'x': a[i, j] := 2;
'.': a[i, j] := 0;
'+':
begin
x := i;
y := j;
a[i, j] := 0;
end;
end;
end;
readln(f);
end;
Close(f);
// PrintMatrix(a);
labirint(x, y);
writeln(k);
// PrintMatrix(a);
end.
- 09.08.2018 23:17
- thumb_up 16
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.