fork download
  1. program solitario;
  2. var N,M,app, soluzione:longint;
  3. griglia:array[0..10,0..10] of longint;
  4.  
  5. function gioca(r, c: longint): boolean;
  6. begin
  7. (*tris orizzontale*)
  8. if (c-2>=0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then gioca:=false
  9. (*tris verticale*)
  10. else if (r-2>=0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then gioca:=false
  11. (* Tris diagonale in alto a sx*)
  12. 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
  13. (* Tris diagonale in alto a dx*)
  14. 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
  15. else gioca := true;
  16. end;
  17. Procedure riempi (riga:longint; colonna:longint; tot:longint);
  18. begin
  19. if colonna=M then begin riga:=riga+1; colonna:=0; end;
  20. if riga=N then begin if tot>soluzione then soluzione:=tot; exit;end;
  21.  
  22. (*Se posso, metto la X*)
  23. if gioca (riga,colonna)=true then
  24. begin
  25. griglia[riga][colonna]:=1;
  26. Riempi(riga,colonna+1, tot+1);
  27. (* Reset della griglia[riga][col]*)
  28. griglia[riga][colonna]:=0;
  29. end;
  30. if (tot+((2 div 3)* (M*N- (riga*M + colonna +1)))+16)<soluzione then exit ;
  31. (* Non metto la X*)
  32. Riempi(riga,colonna+1, tot);
  33.  
  34. end;
  35. begin
  36. readln(N,M);
  37. soluzione:=0; riempi(0,0,0);
  38. writeln(soluzione);
  39. end.
Success #stdin #stdout 0.18s 5284KB
stdin
5 6
stdout
17