fork download
  1. program soitario;
  2. uses Math;
  3. var N,M,i,j, soluzione, con_x, senza_x, nuovariga, nuovacolonna:longint;
  4. griglia:array[0..12,0..12] of longint;
  5.  
  6. function gioca(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 gioca:=false
  10. (*tris orizzontale*)
  11. else if (r-2>=0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then gioca:=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 gioca:=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 gioca:=false
  16. else gioca := true;
  17. end;
  18. function riempi (riga, colonna:longint):longint;
  19. begin
  20. if riga>=N then begin riempi:=0; exit; end
  21. else
  22. begin
  23. if griglia[riga,colonna]<>-1 then riempi:=griglia[riga,colonna]
  24. else
  25. begin
  26. if colonna+1=M then nuovariga:=riga+1
  27. else nuovariga:=riga;
  28. nuovacolonna:= (colonna+1) mod M;
  29.  
  30. (* Non metto la X*)
  31. senza_x:= riempi(nuovariga,nuovacolonna); con_x:=0;
  32. griglia[nuovariga,nuovacolonna]:=0;
  33. (*Se posso, metto la X*)
  34. if gioca (riga,colonna)=true then
  35. begin
  36. if colonna+1=M then nuovariga:=riga+1
  37. else nuovariga:=riga;
  38. nuovacolonna:= (colonna+1) mod M;
  39. griglia[nuovariga][nuovacolonna]:=1;
  40. con_x:= 1 + Riempi(nuovariga,nuovacolonna);
  41. for i:=1 to N do begin
  42. for j:=1 to M do write(griglia[i,j],' '); writeln; end; writeln;
  43.  
  44. (* Reset della griglia[riga][col]*)
  45. griglia[riga][colonna]:=-1;
  46. end;
  47. (*Ritorno la soluzione migliore*)
  48.  
  49.  
  50. end;
  51. griglia[riga][colonna]:= max(senza_x,con_x);
  52. riempi:=griglia[riga, colonna];
  53. end;
  54.  
  55. end;
  56. begin
  57. readln(N,M);
  58. for i:=0 to N do
  59. for j:=0 to M do griglia[i,j]:=-1;
  60. con_x:= 0;
  61. writeln(riempi(0 , 0));
  62. end.
  63.  
Success #stdin #stdout 0s 5272KB
stdin
3 3
stdout
-1 -1 -1 
-1 -1 -1 
-1 -1 -1 

-1 -1 -1 
-1 1 -1 
-1 -1 -1 

-1 -1 -1 
2 0 -1 
-1 -1 -1 

-1 -1 -1 
0 0 -1 
-1 -1 -1 

-1 4 -1 
0 0 -1 
-1 -1 -1 

5 0 -1 
0 0 -1 
-1 -1 -1 

0 0 -1 
0 0 -1 
-1 -1 -1 

0 0 -1 
0 0 -1 
-1 -1 -1 

0 0 -1 
0 0 -1 
-1 -1 -1 

9