document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void dFS(int depth, int nQueens);
  5. bool isCheck(int depth, int queenY);
  6. void printBoard(int nQueens);
  7.  
  8. int Queens[12]={0};
  9. int solveNum=0;
  10.  
  11. int main()
  12. {
  13. int input;
  14. while(cin>>input)
  15. {
  16. if(input==0)
  17. {
  18. break;
  19. }
  20.  
  21. dFS(1,input);
  22.  
  23. cout<<solveNum<<endl<<endl;
  24.  
  25. solveNum=0;
  26. }
  27. return 0;
  28. }
  29.  
  30. void dFS(int depth, int nQueens)
  31. {
  32. if(depth==nQueens+1)
  33. {
  34. printBoard(nQueens);
  35. solveNum++;
  36. return;
  37. }
  38. for(int queenY=1;queenY<=nQueens;queenY++)
  39. {
  40. if(isCheck(depth,queenY))
  41. {
  42. Queens[depth]=queenY;
  43. dFS(depth+1, nQueens);
  44. }
  45. Queens[depth]=0;
  46. }
  47. }
  48.  
  49. bool isCheck(int depth, int queenY)
  50. {
  51. for(int queenX=1;queenX<depth;queenX++)
  52. {
  53. if(Queens[queenX]==queenY)
  54. {
  55. return false;
  56. }
  57. int sideX = depth-queenX;
  58. int sideY = queenY-Queens[queenX];
  59. if(sideX==sideY || sideX==(-1)*sideY)
  60. {
  61. return false;
  62. }
  63. }
  64. return true;
  65. }
  66.  
  67. void printBoard(int nQueens)
  68. {
  69. for(int row=1;row<=nQueens;row++)
  70. {
  71. for(int column=1;column<=nQueens;column++)
  72. {
  73. if(column==Queens[row])
  74. {
  75. cout<<"Q";
  76. }
  77. else
  78. {
  79. cout<<"x";
  80. }
  81. }
  82. cout<<endl;
  83. }
  84. cout<<endl;
  85. }
');