Problema săriturii calului

ELEV: CIORA FLAVIU
CLASA:a XI-a B
Enunţul problemei
Se dă o tablă de şah cu dimensiunea n*n. Un
cal se găseşte în linia 1 şi coloana 1. Găsiţi un şir de
mut...
Pentru n=5 avem o tablă de
dimensiunea 5 linii şi 5 coloane
Algoritmul de rezolvare
Cele 8 poziţii în care poate sări calul sunt:

i-2
j-1

i-2
j+1

i-1
j-2

i-1
j+2

i,j
i+1
j-2

i+...
 Toate elementele la început sunt egale cu 0 asta însemnând că






iniţial nu s-a trecut pe la nici un pătrat. Calu...
Implementarea algoritmului
ns - numărul soluţiilor
n – numărul de linii şi coloane
a – matrice pătratică
i,j – indicii ele...
Programul:
Program cal;
Type sir=array[1..8] of integer;
mat=array[1..20,1..20] of integer;
const di: sir=(-2,-1,1,2,2,1,-...
procedure calul(var a:mat; i,j,pas:integer);
var k,i1,j1:integer;
cond:boolean;
begin
to 8 do begin
i1:=i+di[k];
j1:=j+dj[...
Upcoming SlideShare
Loading in …5
×

Problema calului-1232691710728721-2 (1)

465 views

Published on

dada

Published in: Automotive
  • Be the first to comment

  • Be the first to like this

Problema calului-1232691710728721-2 (1)

  1. 1. Problema săriturii calului ELEV: CIORA FLAVIU CLASA:a XI-a B
  2. 2. Enunţul problemei Se dă o tablă de şah cu dimensiunea n*n. Un cal se găseşte în linia 1 şi coloana 1. Găsiţi un şir de mutări ale calului astfel încât acesta să acopere întreaga tablă fără a trece printr-o căsuţă de două ori.
  3. 3. Pentru n=5 avem o tablă de dimensiunea 5 linii şi 5 coloane
  4. 4. Algoritmul de rezolvare Cele 8 poziţii în care poate sări calul sunt: i-2 j-1 i-2 j+1 i-1 j-2 i-1 j+2 i,j i+1 j-2 i+1 j+2 i+2 j-1 i+2 j+1
  5. 5.  Toate elementele la început sunt egale cu 0 asta însemnând că     iniţial nu s-a trecut pe la nici un pătrat. Calul porneşte de pe poziţia a[1,1] care va fi egal cu 1. Numărul soluţiilor notat cu ns este la început 0 şi se măreşte cu 1 când se apelează procedura de afişare a matricii. De la elementele a[i,j] sare dacă poate într-una dintre cele 8 direcţii adică dacă trebuie să nu sară în afara tablei şi să nu mai fi trecut pe acolo. Dacă sare pe una din cele 8 poziţii se procedează astfel: 1. Elementele din matrice de pe acea poziţie primeşte ca valoare pas. 2. Dacă pasul la care s-a ajuns este n*n, adică pas=n*n, atunci se afişează matricea altfel se autoapelează asupra acestui element. 3. Elementele din matrice de pe acea poziţie primeşte valoarea 0. Pentru a ajunge de la a[i,j] la una din cele 8 poziţii se folosesc vectorii de direcţie: pentru linie di (-2,-1,1,2,2,1,-1,-2), pentru coloană dj (1,2,2,1,-1,-2,-2,-1).
  6. 6. Implementarea algoritmului ns - numărul soluţiilor n – numărul de linii şi coloane a – matrice pătratică i,j – indicii elementului la care s-a ajuns di – vector de poziţie pentru linie dj – vector de poziţie pentru coloană pas – pasul la care s-a ajuns k – direcţiile i1, j1 – coordonatele noii poziţii
  7. 7. Programul: Program cal; Type sir=array[1..8] of integer; mat=array[1..20,1..20] of integer; const di: sir=(-2,-1,1,2,2,1,-1,-2); dj: sir=(1,2,2,1,-1,-2,-2,-1); Var a:mat; i,j,n,ns,pas:integer; Procedure afis_mat; Begin cu numarul’, ns, ‘este:’); begin ns:=ns+1; writeln (‘solutia for i:=1 to n do for j:=1 to n do write(a[i,j]:3);writeln;end; end;
  8. 8. procedure calul(var a:mat; i,j,pas:integer); var k,i1,j1:integer; cond:boolean; begin to 8 do begin i1:=i+di[k]; j1:=j+dj[k]; cond:=(i1 in [1..n]) and (j1 in [1..n]) and (a[i1,j1]=0); if cond then begin a[i1,j1]:=pas; if pas=n*n then afis_mat else calul(a,i1,j1,pas+1); a[i1,j1]:=0; end; end; Begin write(‘n=‘);readln(n); For i:=1 to n do for j:=1 to n do a[i,j]:=0; a[1,1]:=1; pas:=2; calul(a,1,1,pas); readln; for k:=1 ns:=0; End.

×