fork download
  1. program solitario;
  2. uses Math;
  3. var N,M,i,j, soluzione, con_x, senza_x, nuovariga, nuovacolonna:longint;
  4. griglia:array[-1..12,-1..12] of longint;
  5.  
  6. function posso(r, c: longint): boolean;
  7. begin
  8. (*tris orizzontale*)
  9. if (c-2>=0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then posso:=false
  10. (*tris orizzontale*)
  11. else if (r-2>=0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then posso:=false
  12. (* Tris diagonale in alto a sx*)
  13. else if (r-2>=0 ) and (c-2>=0) and (griglia[r-2][c-2]=1) and (griglia[r-1][c-1]=1) then posso:=false
  14. (* Tris diagonale in alto a dx*)
  15. else if (r-2>=0) and (c+2<M) and (griglia[r-2][c+2]=1) and (griglia[r-1][c+1]=1) then posso:=false
  16. else posso := true;
  17. end;
  18. function gioca (riga, colonna:longint):longint;
  19. begin
  20. if riga>N then begin exit; end;
  21. if colonna=M then nuovariga:=riga+1
  22. else nuovariga:=riga;
  23. nuovacolonna:= (colonna) mod M+1;
  24. griglia[riga][colonna]:=0;
  25. senza_x:= gioca(nuovariga, nuovacolonna);
  26. griglia[riga][colonna]:=-1;
  27.  
  28. (*Se posso, metto la X*)
  29. if posso (riga,colonna)=true then begin
  30. griglia[riga][colonna]:=1;
  31. con_x:=1+gioca(nuovariga, nuovacolonna);
  32. griglia[riga][colonna]:=-1;
  33. end;
  34. (*Ritorno la soluzione migliore*)
  35. gioca:= max(con_x,senza_x);
  36.  
  37. end;
  38. begin
  39. readln(N,M);
  40. for i:=0 to N do
  41. for j:=0 to M do griglia[i,j]:=-1;
  42.  
  43. writeln(gioca(0,0));
  44.  
  45.  
  46. end.
  47.  
Success #stdin #stdout 0s 5272KB
stdin
2 6
stdout
7