alvsjo

Skakac

Mar 13th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.09 KB | None | 0 0
  1. program skakac;
  2. //
  3. type niz = array[1..8] of integer;
  4.      matrica= array[1..8] of niz;
  5. var  m,n,i,j,k,l,broj,brres,ppm,ppn:integer;
  6.      pv,pk:niz;
  7.       t: matrica;
  8. procedure stampamatrice(n:integer;a:matrica);
  9. var  i,j:integer;
  10. begin
  11.   writeln;
  12.   for i:=1 to n do
  13.     begin  for j:=1 to n do write(a[i,j]:4);writeln;writeln;
  14.     end;
  15.     readln;
  16. end;
  17. function Utabli(v,k:integer):boolean;
  18. begin
  19.   Utabli:=(v>0)and(v<9)and(k>0)and(k<9);
  20. end;
  21. function BrojSlPolja(v,k:integer):integer;
  22. var  b,l:integer;
  23. begin
  24.   b:=0;
  25.   for l:=1 to 8 do
  26.     if Utabli(v+pv[l],k+pk[l])
  27.               then if t[v+pv[l],k+pk[l]]=0
  28.                     then b:=b+1;
  29.     BrojSlPolja:=b;                
  30. end;
  31. procedure razmjena (var a,b:integer);
  32. var t:integer;
  33. begin  t:=a;a:=b;b:=t;
  34. end;
  35. procedure skakac(v,k,broj:integer);
  36. var  l,l1:integer;red,bsp:niz;
  37. begin
  38.   broj:=broj+1;
  39.   t[v,k]:=broj;//stampamatrice(8,t);
  40.   if broj<64
  41.     then
  42.       begin
  43.         if brojSlPolja(ppm,ppn)>0 then
  44.         begin
  45.         for l:=1 to 8 do
  46.  
  47.  
  48.          begin
  49.            red[l]:=l;bsp[l]:=0;
  50.            if Utabli(v+pv[l],k+pk[l])
  51.               then if t[v+pv[l],k+pk[l]]=0
  52.                     then bsp[l]:=BrojSlPolja(v+pv[l],k+pk[l]);
  53.          end ;
  54.          for l:=1 to 7 do
  55.             for l1:=l+1 to 8 do
  56.                begin
  57.                     if bsp[l1]<bsp[l]
  58.                        then
  59.                           begin
  60.                               razmjena(bsp[l1],bsp[l]);
  61.                               razmjena(red[l1],red[l]);
  62.                           end; 
  63.                end;            
  64.         for l:=1 to 8 do
  65.           begin
  66.               if Utabli(v+pv[red[l]],k+pk[red[l]])
  67.               then if t[v+pv[red[l]],k+pk[red[l]]]=0
  68.                 then skakac(v+pv[red[l]],k+pk[red[l]],broj);
  69.           end;
  70.           end;
  71.                   t[v,k]:=0;
  72.       end
  73.     else
  74.        begin   
  75.          brres:=brres+1;
  76.          writeln(' Resenje ',brres,' je : ' );
  77.          stampamatrice(8,t);
  78.          t[v,k]:=0;
  79.        end;
  80. end;
  81.  
  82.  
  83. begin
  84.   pv[1]:=-2;pv[2]:=-1;pv[3]:=1;pv[4]:=2;pv[5]:=2;pv[6]:=1;pv[7]:=-1;pv[8]:=-2;
  85.   pk[1]:=1;pk[2]:=2;pk[3]:=2;pk[4]:=1;pk[5]:=-1;pk[6]:=-2;pk[7]:=-2;pk[8]:=-1;
  86.   write('Koordinate pocetnog polja: ');
  87.   readln (m,n);broj:=0;brres:=0;ppm:=m;ppn:=n;
  88.   skakac(m,n,broj);
  89.   readln;
  90.  
  91.  
  92. end.
Add Comment
Please, Sign In to add comment