ИВТ/ 9 КЛАСС/ ХЕЕЕЛП/ 30 БАЛЛОВЛабиринтТерминатор T101 заблудился в лабиринтах подвальных

ИВТ/ 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

Задать свой вопрос
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 lt;= n) and (i gt;= 0) and (j lt;= m) and (j gt;= 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.
, оставишь ответ?
Имя:*
E-Mail:


Последние вопросы

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт