Advertisement
MilanR

mlatka

Feb 24th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.79 KB | None | 0 0
  1. program WOLLY;
  2.  
  3. var i,j, n, m:integer;
  4.     a:array[1..100, 1..100] of integer;
  5.     StartX, StartY:integer;
  6.     d:integer;
  7.     b:array[1..100] of integer;
  8.     ResenjeX,ResenjeY:array[1..100] of integer;
  9.     r:integer;
  10.  
  11. procedure solve(X, Y, korak:integer);
  12. var i:integer;
  13.     error:boolean;
  14. begin
  15.     // u desno
  16.     error:=X+b[korak]>m;
  17.     if not (error) then
  18.         for i:=1 to b[korak] do
  19.             if a[X+i, Y] = 1 then
  20.             begin
  21.                 error:=true;
  22.                 break;
  23.             end;
  24.     if not (error) then
  25.     begin
  26.         if korak < d then
  27.             solve(X+b[korak], Y, korak+1)
  28.         else
  29.         begin
  30.             if r > 0 then
  31.                 for i:=1 to r do
  32.                     if (ResenjeX[i]=X+b[korak]) and (ResenjeY[i]=Y) then
  33.                     begin
  34.                         error:=true;
  35.                         break;
  36.                     end;
  37.             if not (error) then
  38.             begin
  39.                 r:=r+1;
  40.                 ResenjeX[r]:=X+b[korak];
  41.                 ResenjeY[r]:=Y;
  42.                 writeln('Resenje (', X+b[korak], ',', Y, ')');
  43.             end;
  44.         end;
  45.     end;
  46.     // u levo
  47.     error:=X-b[korak]<1;
  48.     if not(error) then
  49.         for i:=1 to b[korak] do
  50.             if a[X-i, Y] = 1 then
  51.             begin
  52.                 error:=true;
  53.                 break;
  54.             end;
  55.     if not (error) then
  56.     begin
  57.         if korak < d then
  58.             solve(X-b[korak], Y, korak+1)
  59.         else
  60.         begin
  61.             if r > 0 then
  62.                 for i:=1 to r do
  63.                     if (ResenjeX[i]=X-b[korak]) and (ResenjeY[i]=Y) then
  64.                     begin
  65.                         error:=true;
  66.                         break;
  67.                     end;
  68.             if not (error) then
  69.             begin
  70.                 r:=r+1;
  71.                 ResenjeX[r]:=X-b[korak];
  72.                 ResenjeY[r]:=Y;
  73.                 writeln('Resenje (', X-b[korak], ',', Y, ')');
  74.             end;
  75.         end;
  76.     end;
  77.     // na gore
  78.     error:=Y-b[korak]<1;
  79.     if not(error) then
  80.         for i:=1 to b[korak] do
  81.             if a[X, Y-i] = 1 then
  82.             begin
  83.                 error:=true;
  84.                 break;
  85.             end;
  86.     if not (error) then
  87.     begin
  88.         if korak < d then
  89.             solve(X, Y-b[korak], korak+1)
  90.         else
  91.         begin
  92.             if r > 0 then
  93.                 for i:=1 to r do
  94.                     if (ResenjeX[i]=X)and(ResenjeY[i]=Y-b[korak]) then
  95.                     begin
  96.                         error:=true;
  97.                         break;
  98.                     end;
  99.             if not (error) then
  100.             begin
  101.                 r:=r+1;
  102.                 ResenjeX[r]:=X;
  103.                 ResenjeY[r]:=Y-b[korak];
  104.                 writeln('Resenje (', X,',', Y-b[korak], ')');
  105.             end;
  106.         end;
  107.     end;
  108.     // na dole
  109.     error:=Y+b[korak]>m;
  110.     if not(error) then
  111.         for i:=1 to b[korak] do
  112.             if (a[X, Y+i] = 1) then
  113.             begin
  114.                 error:=true;
  115.                 break;
  116.             end;
  117.     if not (error) then
  118.     begin
  119.         if korak < d then
  120.             solve(X, Y+b[korak], korak+1)
  121.         else
  122.         begin
  123.             if r > 0 then
  124.                 for i:=1 to r do
  125.                     if(ResenjeX[i]=X)and(ResenjeY[i]=Y+b[korak]) then
  126.                     begin
  127.                         error:=true;
  128.                         break;
  129.                     end;
  130.             if not (error) then
  131.             begin
  132.                 r:=r+1;
  133.                 ResenjeX[r]:=X;
  134.                 ResenjeY[r]:=Y+b[korak];
  135.                 writeln('Resenje (', X,',', Y+b[korak], ')');
  136.             end;
  137.         end;
  138.     end;
  139. end;
  140.  
  141. begin
  142.     read(n, m, StartX, StartY);
  143.     for i:=1 to n do
  144.         for j:=1 to m do
  145.             read(a[i, j]);
  146.     readln(d);
  147.     for i:=1 to d do
  148.             read(b[i]);
  149.  
  150.     r:=0;
  151.     solve(StartX, StartY, 1);
  152.     writeln(r);
  153. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement