Advertisement
ridjis

nadjiPut

Dec 10th, 2014
562
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROCEDURE nadjiPut(VAR l:lavirint; VAR maxr:resenje):BOOLEAN;
  2.     PROCEDURE put (x,y:CARDINAL; VAR pos: posete; VAR r:resenje);
  3.     BEGIN
  4.         IF (x<1) OR (x>l.v) OR (y<1) OR (y>l.s) THEN
  5.             RETURN;
  6.         END;
  7.         IF (pos[x,y]) THEN
  8.             RETURN;
  9.         END;
  10.         IF (l.mat[x,y] = zid) THEN
  11.             RETURN;
  12.         END;
  13.         IF (l.mat[x,y] = cilj) THEN
  14.             dodaj(r,x,y);
  15.             IF (r.vrednost > maxr.vrednost) THEN
  16.                 maxr := r;
  17.             END;
  18.             izbaciKraj(r);
  19.         ELSE
  20.             pos[x,y] := TRUE;
  21.             dodajv(r,x,y,l.mat[x,y]);
  22.             put(x+1,y, pos,r);
  23.             put(x,y+1, pos,r);
  24.             put(x-1,y, pos,r);
  25.             put(x,y-1, pos,r);
  26.             pos[x,y] := FALSE;
  27.             izbaciKrajv(r, l.mat[x,y]);
  28.         END;
  29.         RETURN;
  30.     END put;
  31.  
  32. VAR pos :posete;
  33.     r   :resenje;
  34. BEGIN
  35.     InitFalse(pos,l.v,l.s);
  36.     r.n := 0;
  37.     r.vrednost := 0;
  38.     maxr.vrednost := -1;
  39.     put(1,1,pos,r);
  40.     RETURN maxr.vrednost#-1;
  41. END nadjiPut;
  42.  
  43. PROCEDURE nadjiPutNajkraci(VAR l:lavirint; VAR min:resenje):BOOLEAN;
  44.     PROCEDURE put (x,y:CARDINAL; VAR pos: posete; VAR r:resenje);
  45.     BEGIN
  46.         IF (x<1) OR (x>l.v) OR (y<1) OR (y>l.s) THEN
  47.             RETURN;
  48.         END;
  49.         IF (pos[x,y]) THEN
  50.             RETURN;
  51.         END;
  52.         IF (l.mat[x,y] = zid) THEN
  53.             RETURN;
  54.         END;
  55.         IF (l.mat[x,y] = cilj) THEN
  56.             dodaj(r,x,y);
  57.             IF (r.n < min.n) THEN
  58.                 min := r;
  59.             END;
  60.             izbaciKraj(r);
  61.         ELSE
  62.             pos[x,y] := TRUE;
  63.             dodaj(r,x,y);
  64.  
  65.             put(x+1,y, pos,r);
  66.             put(x,y+1, pos,r);
  67.             put(x-1,y, pos,r);
  68.             put(x,y-1, pos,r);
  69.            
  70.             pos[x,y] := FALSE;
  71.             izbaciKraj(r);
  72.         END;
  73.         RETURN;
  74.     END put;
  75. VAR pos :posete;
  76.     r   :resenje;
  77. BEGIN
  78.     InitFalse(pos,l.v,l.s);
  79.     r.n := 0;
  80.     min.n := maxPut+1;
  81.     put(1,1,pos,r);
  82.     RETURN min.n#maxPut+1;
  83. END nadjiPutNajkraci;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement