СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Условие и решение задачи « Огромная парковка».

Категория: Информатика

Нажмите, чтобы узнать подробности

Условие и решение задачи « Огромная парковка».

Просмотр содержимого документа
«Условие и решение задачи « Огромная парковка».»

Решение задачи « Огромная парковка»

const
  sx:array[1..4] of longint = (1, 0, -1, 0);
  sy:array[1..4] of longint = (0, 1, 0, -1);
  maxn = 55;
  maxq = 1000000;

var
  a:array[0..maxn, 0..maxn] of char;
  d:array[0..maxn, 0..maxn, 0..maxn, 0..maxn] of longint;
  x,y,xx,yy:array[0..maxq] of longint;
  nx,ny,nxx,nyy,pd,pxx,pyy,px,py,stx,sty,enx,eny,q1,q2,n,m,i,j,k:longint;

procedure add(const cx, cy, cxx, cyy, cd:longint);
begin
  if (cx = 0)or(cy = 0)or(cxn)or(cym)or
  (cxx = 0)or(cyy = 0)or(cxxn)or(cyym)or
  (a[cx, cy] = '#')or
  (a[cxx, cyy] = '#')or(d[cx, cy, cxx, cyy]  if (cxx = 1)and(cyy = 1) then
  begin
    writeln(cd);
    close(output);
    halt;
  end;
  x[q1]:=cx;
  y[q1]:=cy;
  xx[q1]:=cxx;
  yy[q1]:=cyy;
  inc(q1);
  d[cx, cy, cxx, cyy]:=cd;
end;

begin
  assign(input, 'parking.in');
  reset(input);
  assign(output, 'parking.out');
  rewrite(output);
  readln(n, m);
  for i:=1 to n do
  begin
    for j:=1 to m do read(a[i, j]);
    readln;
  end;
  for i:=1 to n do for j:=1 to m do if a[i, j] = 'X' then
  begin
    stx:=i;
    sty:=j;
  end else if a[i, j] = '.' then
  begin
    enx:=i;
    eny:=j;
  end;
  fillchar(d, sizeof(d), 63);
  add(enx, eny, stx, sty, 0);
  while q1q2 do
  begin
    px:=x[q2];
    py:=y[q2];
    pxx:=xx[q2];
    pyy:=yy[q2];
    pd:=d[px, py, pxx, pyy];
    for k:=1 to 4 do
    begin
      nx:=px+sx[k];
      ny:=py+sy[k];
      nxx:=pxx;
      nyy:=pyy;
      if (nxx = nx)and(nyy = ny) then
      begin
        nx:=pxx;
        ny:=pyy;
        nxx:=px;
        nyy:=py;
      end;
      add(nx, ny, nxx, nyy, pd+1);
    end;
    inc(q2);
  end;
  writeln('Impossible');
  close(output);
end.