当前位置:   article > 正文

[数据结构] N皇后问题

n皇后问题 (20分)在n * n的方格棋盘上,放置n个皇后,要求每个皇后不同行,不同列,不同左右对角线。 其中n不超过10。 要求:输出所有的解。 算法提示:用栈求解皇后问题

代码:

  1. #include <iostream>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N=100;
  6. int c[N];//皇后第i行放在第几列上
  7. int n,total;
  8. int cc;//方法数
  9. void dfs(int cur)
  10. {
  11. if(cur>n)
  12. {
  13. cout<<"第"<<cc++<<"种方法:"<<endl<<endl;
  14. for(int i=1;i<=n;i++)
  15. {
  16. cout<<"第 "<<i<<" 个皇后放在第 "<<i<<" 行的第 "<<c[i]<<" 列上"<<endl<<endl;
  17. }
  18. total++;
  19. return;
  20. }
  21. for(int i=1;i<=n;i++)
  22. {
  23. c[cur]=i;
  24. int ok=1;
  25. for(int j=1;j<cur;j++)
  26. {
  27. if(c[cur]==c[j]||cur-c[cur]==j-c[j]||cur+c[cur]==j+c[j])
  28. {
  29. ok=0;
  30. break;
  31. }
  32. }
  33. if(ok)
  34. dfs(cur+1);
  35. }
  36. }
  37. int main()
  38. {
  39. while(1)
  40. {
  41. cout<<"请输入皇后的个数: "<<endl;
  42. cin>>n;
  43. if(n<=0)
  44. {
  45. cout<<"输入不合法,程序退出!"<<endl;
  46. break;
  47. }
  48. cc=1;
  49. total=0;
  50. dfs(1);
  51. cout<<"总计有"<<total<<"个解"<<endl<<endl;
  52. }
  53. return 0;
  54. }

运行截图:



转载于:https://www.cnblogs.com/sr1993/p/3697751.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/633228
推荐阅读
相关标签
  

闽ICP备14008679号