fork download
  1. ////M queens N castles
  2. #include <stdio.h>
  3. void put(int row, int m, int n);
  4. int map[20][20]={0}, M, N;
  5. int num_solution = 0;
  6. int safeforqueen(int row,int col);
  7. int safeforcastle(int row, int col);
  8.  
  9. int main(void){
  10. scanf("%d %d", &M, &N);
  11. put(0, 0, 0);
  12. printf("%d\n", num_solution);
  13. return 0;
  14. }
  15.  
  16. void put(int row, int m, int n){
  17. int col;
  18. if(row == M+N){
  19. num_solution ++;
  20. }
  21. else{
  22. for(col = 0; col < M+N; col++){
  23. if(m < M && safeforqueen(row, col)){
  24. map[row][col] = 1;
  25. put(row+1, m+1, n);
  26. map[row][col] = 0;
  27. }
  28.  
  29. if(n < N && safeforcastle(row, col)){
  30. map[row][col] = 2;
  31. put(row+1, m, n+1);
  32. map[row][col] = 0;
  33. }
  34. }
  35. }
  36. }
  37.  
  38. int safeforqueen(int row, int col){
  39. int r, c;
  40. for(r= 0; r < row; r++){
  41. if(map[r][col]) return 0;
  42. }
  43. for(r = row-1, c = col + 1; r >=0 && c < M+N; r--, c++){
  44. if(map[r][c]) return 0;
  45. }
  46. for(r = row-1, c = col-1; r>= 0 && c >= 0; r--, c--){
  47. if(map[r][c]) return 0;
  48. }
  49. return 1;
  50. }
  51.  
  52. int safeforcastle(int row, int col){
  53. int r, c;
  54. for(r= 0; r < row; r++){
  55. if(map[r][col]) return 0;
  56. }
  57. for(r = row-1, c = col - 1; r >=0 && c>=0; r--, c--){
  58. if(map[r][c]==1) return 0;
  59. }
  60. for(r = row-1, c = col+1; r>= 0 && c < M+N; r--, c++){
  61. if(map[r][c]==1) return 0;
  62. }
  63. return 1;
  64. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
1