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 soluzione:=0; exit; end
  21. else
  22. begin
  23. if griglia[riga,colonna]<>-1 then begin soluzione:=griglia[riga,colonna]; end
  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.  
  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.  
  47. end;
  48. (*Ritorno la soluzione migliore*)
  49.  
  50.  
  51. end;
  52. griglia[riga][colonna]:= max(senza_x,con_x);
  53. soluzione:=griglia[riga, colonna];
  54. end;
  55. riempi:=soluzione;
  56. end;
  57. begin
  58. readln(N,M);
  59. for i:=0 to N do
  60. for j:=0 to M do griglia[i,j]:=-1;
  61. con_x:= 0;
  62. writeln(riempi(0 , 0));
  63. end.
  64.  
  65.  
Success #stdin #stdout 0.01s 5280KB
stdin
3 3
stdout
-1 -1 -1 
-1 -1 -1 
-1 -1 -1 

-1 -1 -1 
-1 157 -1 
-1 -1 -1 

-1 -1 -1 
158 157 -1 
-1 -1 -1 

-1 -1 -1 
158 157 -1 
-1 -1 -1 

-1 160 -1 
158 157 -1 
-1 -1 -1 

161 160 -1 
158 157 -1 
-1 -1 -1 

161 160 -1 
158 157 -1 
-1 -1 -1 

161 160 -1 
158 157 -1 
-1 -1 -1 

161 160 -1 
158 157 -1 
-1 -1 -1 

165