`
dyccsxg
  • 浏览: 201861 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

N 皇后求解回溯算法

阅读更多
  1. /*******************************************************
  2. *n后求解问题
  3. *******************************************************/
  4. #include<iostream.h>
  5. #include<stdio.h>
  6. #include<math.h>
  7. #include<conio.h>
  8. #defineMAXNUMBER20//最大求解数
  9. //输出n后的解
  10. /******************************************************
  11. *例如8皇后的一组解为:
  12. *15863724
  13. *其含义为
  14. *第1个皇后位于第1行第1列
  15. *第2个皇后位于第2行第5列
  16. *第3个皇后位于第3行第8列
  17. *第4个皇后位于第4行第6列
  18. *......
  19. *第i个皇后位于第i行第x[i]列(i>=1)
  20. ******************************************************/
  21. voidoutput_queens(intx[],intn)
  22. {
  23. for(inti=1;i<=n;i++)
  24. printf("%3d",x[i]);
  25. printf("\n");
  26. }
  27. //判断第k个皇后是否合法
  28. boolcheck(intx[],intk)
  29. {
  30. for(inti=1;i<k;i++)
  31. {//列冲突x[i]==x[k]或斜线冲突abs(k-i)==abs(x[k]-x[i])
  32. if(x[i]==x[k]||abs(k-i)==abs(x[k]-x[i]))
  33. returnfalse;
  34. }
  35. returntrue;
  36. }
  37. /*******************************************************
  38. *n后问题求解
  39. *input:n,thenumberofqueens
  40. *output:thevectorofsolution,X
  41. *******************************************************/
  42. intn_queens(intn,intx[])
  43. {
  44. intnCount=0;//解的个数
  45. intk=1;//先处理第1个皇后
  46. x[1]=0;
  47. while(k>0)
  48. {
  49. x[k]=x[k]+1;//在当前列加1的位置搜索
  50. while(x[k]<=n&&!check(x,k))
  51. x[k]=x[k]+1;//如果当前列x[k]不满足条件则搜索下一列x[k]+1
  52. if(x[k]<=n)
  53. {//列x[k]满足条件
  54. if(k==n)
  55. {//当前是最后一个皇后=>得到一组解
  56. //break;//若此处break则只得到一组解
  57. nCount++;//解的个数加1
  58. output_queens(x,n);//输出n后的解
  59. }else
  60. {//计算第k+1个皇后
  61. k++;
  62. x[k]=0;
  63. }
  64. }else
  65. {//不存在满足条件的列=>回溯
  66. x[k]=0;
  67. k--;
  68. }
  69. }
  70. returnnCount;
  71. }
  72. voidmain()
  73. {
  74. intn=8;
  75. intx[MAXNUMBER]={0};
  76. printf("GameStart:\n");
  77. intnCount=n_queens(8,x);
  78. printf("TotalNumber:%4d\n",nCount);
  79. printf("Gameover!!!\n\n\n");
  80. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics