Advertisement
alvsjo

skakac (nezavrseno)

Mar 13th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.19 KB | None | 0 0
  1. {
  2. kruzna putanja
  3.         *       *
  4.     *               *
  5.             1
  6.     *               *
  7.         *       *
  8.        
  9. }
  10.  
  11. program skakac;
  12. type
  13.     niz=array[1..8]of integer;
  14.     matrica=array[1..8]of niz;
  15. var
  16.     broj,m,n,k,brres:integer;
  17.     pv,pk:niz;
  18.     t:matrica;
  19.  
  20. procedure UnosMatrice(var n:integer; var a:matrica);
  21. var i,j:integer;
  22. begin
  23.     write('Broj vrsta: ');
  24.     readln(m);
  25.     write('Broj kolona: ');
  26.     readln(n);
  27.     for i:=1 to n do
  28.     begin
  29.         for j:=1 to n do
  30.         begin
  31.         write('A[',i,';',j,']= ');
  32.         readln(A[i,j]);
  33.         writeln;
  34.         end;
  35.     end;
  36. end;
  37.  
  38.  
  39. procedure StampaMatrice(n:integer; A:matrica);
  40. var i,j:integer;
  41. begin
  42.     writeln;
  43.     for i:=1 to n do
  44.     begin
  45.         for j:=1 to n do
  46.         begin
  47.         write(A[i,j]:4);
  48.         end;
  49.         writeln;
  50.     end;
  51.     writeln;
  52.    
  53. end;
  54.  
  55. function UTabli(v,k:integer):boolean;
  56. begin
  57.     UTabli:=((v>0)and(v<9))and((k>0)and (k<9));
  58. end;
  59.  
  60. function BrojSlPolja(v,k:integer):integer;
  61. var b,l:integer;
  62. begin
  63.     b:=0;
  64.     for l:=0 to 8 do
  65.     if UTabli(v+pv[l],k+pk[l]) then
  66.             begin
  67.                 if t [v+pv[l],k+pk[l]]=0 then
  68.                     b:=b+1;
  69.             end;
  70.     BrojSlPolja:=b;
  71. end;
  72.  
  73. procedure razmjena (var a,b:integer);
  74. var p:integer;
  75. begin
  76.     p:=a;
  77.     a:=b;
  78.     b:=p;
  79. end;
  80.  
  81.  
  82.  
  83. procedure skakac(v,k,broj:integer);
  84. var l,l1:integer;
  85. red,bsp:niz;
  86. begin
  87. t[v,k]:=broj;
  88. //StampaMatrice(8,t);
  89. if broj<64 then
  90.     begin
  91.         for l:=1 to 8 do
  92.         begin
  93.          red[l]:=l;
  94.          if UTabli(v+pv[l],k+pk[l]) then bsp[l]:=BrojSlPolja(v+pv[l],k+pk[l]);
  95.         end;
  96.         for l:=1 to 7 do
  97.         begin
  98.             for l1:=l+1 to 8 do
  99.             begin
  100.                 if bsp[l1]<bsp[l] then
  101.                 begin
  102.                 razmjena(bsp[l1],bsp[l]);
  103.                 razmjena(red[l1],red[l]);
  104.                 end;
  105.             end;
  106.         end;
  107.         for l:=1 to 8 do
  108.         begin
  109.            
  110.             if UTabli(v+pv[red[l]],k+pk[red[l]]) then
  111.             begin
  112.                 if t [v+pv[red[l]],k+pk[red[l]]]=0 then
  113.                     skakac(v+pv[red[l]],k+pk[red[l]],broj+1);
  114.             end;
  115.         end;
  116.         t[v,k]:=0;
  117.     end
  118. else
  119.     begin
  120.     brres:=brres+1;
  121.     writeln('Rjesenje ',brres, ' je: ');
  122.     StampaMatrice(8,t);
  123.     t[v,k]:=0;
  124.     end;
  125. end;
  126.  
  127.  
  128. begin
  129. pv[1]:=-2;
  130. pv[2]:=-1;
  131. pv[3]:=1;
  132. pv[4]:=2;
  133. pv[5]:=2;
  134. pv[6]:=1;
  135. pv[7]:=-1;
  136. pv[8]:=-2;
  137. pk[1]:=1;
  138. pk[2]:=2;
  139. pk[3]:=2;
  140. pk[4]:=1;
  141. pk[5]:=-1;
  142. pk[6]:=-2;
  143. pk[7]:=-2;
  144. pk[8]:=-1;
  145. write('Koordinate pocetnog polja: ');
  146. readln (m,n);
  147. broj:=1;
  148. brres:=0;
  149. skakac(m,n,broj);
  150.  
  151.  
  152. readln;
  153. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement