Площадь комнаты - Pascal
Формулировка задачи:
Требуется вычислить площадь комнаты в квадратном лабиринте. Входные данные В первой строке вводится число N – размер лабиринта (3 <= N <=10). В следующих N строках задан лабиринт (‘.’ – пустая клетка, ‘*’ – стенка). И наконец, последняя строка содержит два числа – номер строки и столбца клетки, находящейся в комнате, площадь которой необходимо вычислить. Гарантируется, что эта клетка пустая и что лабиринт окружен стенками со всех сторон. Выходные данные Требуется вывести единственное число – количество пустых клеток в данной комнате. Примеры входные данные 5 ***** **..* *.*.* *..** ***** 2 4 выходные данные 3
Решение задачи: «Площадь комнаты»
textual
Листинг программы
- program Labirint;
- uses
- crt;
- type
- arr = array[1..10,1..10] of char;
- procedure vyvodarr (a: arr; n: integer); // Процедура для вывода матрицы на экран.
- var
- i,j: integer;
- begin
- for i:=1 to n do
- begin
- for j:=1 to n do
- begin
- Write(a[i,j]:3);
- end;
- Writeln;
- end;
- Writeln;
- end;
- var
- //a1: arr = (('*','*','*','*','*'),('*','*','.','.','*'),('*','.','*','.','*'),('*','.','.','*','*'),('*','*','*','*','*'));
- a1: arr; // Переменная для хранения исходного лабиринта.
- b1: arr; // Переменная для хранения промежуточных переменных при прохождении лабиринта.
- k: integer; // Переменная для хранения значения количества посещенных ячеек.
- i,j,ip,jp: integer; // Промежуточные переменные для организации циклов.
- ibeg,jbeg: integer; // Переменные для хранения адреса начальной, заведомо пустой ячейки.
- t: integer; // Промежуточная переменная для хранения числа окружающих стен.
- Stop: boolean; // Промежуточная переменная для остановки работы алгоритма.
- n1: integer; // Переменная для хранения размера лабиринта.
- begin
- Writeln('Введите размер лабиринта:');
- Readln(n1);
- Writeln('Введите структуру лабиринта( "*" - стена, "." - комната):');
- for i:=1 to n1 do
- for j:=1 to n1 do
- Readln(a1[i,j]);
- Readln(n1);
- vyvodarr(a1,n1);
- for i:=1 to n1 do
- for j:=1 to n1 do
- b1[i,j]:=' ';
- Writeln('Введите координаты точки вхождения:');
- Writeln('Номер строки:');
- Readln(ibeg);
- Writeln('Номер столбца:');
- Readln(jbeg);
- i:=ibeg;
- j:=jbeg;
- t:= 0;
- k:= 0;
- repeat
- if a1[i,j+1]='*' then
- begin
- inc(t);
- b1[i,j+1]:= 'W'; // Стена('W'- wall)
- end
- else
- if not (b1[i,j+1] in ['D','V','W']) then
- b1[i,j+1]:= 'R'; // Дорога ('R' - road)
- if a1[i,j-1]='*' then
- begin
- inc(t);
- b1[i,j-1]:= 'W';
- end
- else
- if not (b1[i,j-1] in ['D','V','W']) then
- b1[i,j-1]:= 'R';
- if a1[i+1,j]='*' then
- begin
- inc(t);
- b1[i+1,j]:= 'W';
- end
- else
- if not (b1[i+1,j] in ['D','V','W']) then
- b1[i+1,j]:= 'R';
- if a1[i-1,j]='*' then
- begin
- inc(t);
- b1[i-1,j]:= 'W';
- end
- else
- if not (b1[i-1,j] in ['D','V','W']) then
- b1[i-1,j]:= 'R';
- if t = 3 then
- begin
- b1[i,j]:= 'D'; // Были в этой ячейке, но здесь тупик 'D' - dead end.
- inc(k);
- end;
- t:= 0;
- if (a1[i,j] = '.') and (b1[i,j] <> 'V') and (b1[i,j] <> 'D') then
- begin
- b1[i,j]:= 'V'; // Были в этой ячейке (v - "visit").
- inc(k);
- end;
- stop:= true;
- for ip:=1 to n1 do
- for jp:=1 to n1 do
- if b1[ip,jp] = 'R' then
- begin
- i:=ip;
- j:=jp;
- stop:=false;
- end;
- ClrScr;
- writeln('"W"- wall, "R" - road, "V" - visit, "D" - dead end.');
- vyvodarr(b1,n1);
- Delay(1000);
- until stop;
- writeln('Количество свободных ячеек: ',k);
- Readln;
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д