Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВиталий Шнейдеров
1 Задача о лабиринте Формулировка. Имеется прямоугольная матрица N x M, который задается лабиринт. Нули в матрице обозначают проход, минус единицы - стены. Нужно определить координаты выходов из этой пещеры (если есть).
2 Входные данные. Текстовый файл, содержащий размеры матрицы и описание лабиринта Координаты исходной позиции в лабиринте 3 Выходные данные 1,5 3,6
3 const LabMax = 50; var Lab : array[0..LabMax+1, 0..LabMax+1] of integer; K0, L0 : byte; N, M: integer;
4 Чтение карты лабиринта из файла и формирование матрицы procedure ReadLab(FileName: string); var i, j : integer; F : Text; begin AssignFile (F, FileName); Reset (F); Readln (F,N); ReadLn (F,M); //Считываем N и M
5 Чтение карты лабиринта из файла и формирование матрицы 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;
6 Вывод матрицы на экран 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;
7 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;
8 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;
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.