Задача о лабиринте Формулировка. Имеется прямоугольная матрица N x M, который задается лабиринт. Нули в матрице обозначают проход, минус единицы - стены. Нужно определить координаты выходов из этой пещеры (если есть).
Входные данные. Текстовый файл, содержащий размеры матрицы и описание лабиринта Координаты исходной позиции в лабиринте 3 Выходные данные 1,5 3,6
const LabMax = 50; var Lab : array[0..LabMax+1, 0..LabMax+1] of integer; K0, L0 : byte; N, M: integer;
Чтение карты лабиринта из файла и формирование матрицы procedure ReadLab(FileName: string); var i, j : integer; F : Text; begin AssignFile (F, FileName); Reset (F); Readln (F,N); ReadLn (F,M); //Считываем N и M
Чтение карты лабиринта из файла и формирование матрицы for j:=0 to M+1 do lab[0,j] := -1; for i:=1 to N do begin lab[i,0]:=-1; for j:=1 to M do Read (F, Lab[i,j]); Lab[i,M+1]:=-1; end; for j:=0 to M+1 do lab[N+1, j]:=-1; CloseFile(F); end;
Вывод матрицы на экран procedure PrintLab; var i, j : byte; begin for i:=1 to N do begin for j:=1 to M do write(Lab[i,j]:3); writeln; end;
procedure Search (K,L:integer); const deltaK : array[1..4] of integer = (1,0,-1,0); deltaL : array[1..4] of integer = (0,-1,0,1); var A, B : TElem; p,i: integer;
begin A.K:=K; A.L :=L; Lab[A.K, A.L] := 1; Put (A); while (get(A) = 0) do begin if (A.K = 1) or (A.K = N) or (A.L =1) or (A.L = M) then writeln ('Выход: ',A.K,',',A.L); p:=Lab[A.K, A.L]; for i:=1 to 4 do if (Lab[A.K+deltaK[i], A.L+deltaL[i]] = 0) then begin B.K := A.K+deltaK[i]; B.L := A.L+deltaL[i]; put (B); Lab[B.K, B.L] := p + 1; end; end; end;