C++实现八皇后问题

  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4.  
  5. #include <iomanip>
  6. using std::setw;
  7.  
  8. #include <cmath>
  9. //非递归算法解决八皇后问题。求出可能的92种。
  10. // using std::abs;
  11.  
  12. int main()
  13. {
  14. static int queen[9];
  15. static int count=1;
  16.  
  17. for (int A=1;A<=8;A++)
  18. {
  19. for (int B=1;B<=8;B++)
  20. {
  21. if (B==A)
  22. {
  23. continue;
  24. }
  25.  
  26. queen[2]=B;
  27. if ((abs(B-A))==1)
  28. {
  29. continue;
  30. }
  31. queen[1]=A;
  32.  
  33. for (int C=1;C<=8;C++)
  34. {
  35. if ((C==B) || (C==A))
  36. {
  37. continue;
  38. }
  39.  
  40. if ((abs(C-B)==1)||(abs(C-A)==2))
  41. {
  42. continue;
  43. }
  44. queen[3]=C;
  45.  
  46. for (int D=1;D<=8;D++)
  47. {
  48. if ((D==C)||(D==B)||(D==A))
  49. {
  50. continue;
  51. }
  52.  
  53. if ((abs(D-C)==1)||(abs(D-B)==2)||(abs(D-A)==3))
  54. {
  55. continue;
  56. }
  57. queen[4]=D;
  58.  
  59. for (int E=1;E<=8;E++)
  60. {
  61. if ((E==D)||(E==C)||(E==B)||(E==A))
  62. {
  63. continue;
  64. }
  65.  
  66. if ((abs(E-D)==1)||(abs(E-C)==2)||(abs(E-B)==3)||(abs(E-A)==4))
  67. {
  68. continue;
  69. }
  70. queen[5]=E;
  71.  
  72. for (int F=1;F<=8;F++)
  73. {
  74. if ((F==E)||(F==D)||(F==C)||(F==B)||(F==A))
  75. {
  76. continue;
  77. }
  78.  
  79. if ((abs(F-E)==1)||(abs(F-D)==2)||(abs(F-C)==3)||(abs(F-B)==4)||(abs(F-A)==5))
  80. {
  81. continue;
  82. }
  83. queen[6]=F;
  84.  
  85. for (int G=1;G<=8;G++)
  86. {
  87. if ((G==F)||(G==E)||(G==D)||(G==C)||(G==B)||(G==A))
  88. {
  89. continue;
  90. }
  91.  
  92. if ((abs(G-F)==1)||(abs(G-E)==2)||(abs(G-D)==3)||(abs(G-C)==4)||(abs(G-B)==5)||(abs(G-A)==6))
  93. {
  94. continue;
  95. }
  96. queen[7]=G;
  97.  
  98. for (int I=1;I<=8;I++)
  99. {
  100. if ((I==G)||(I==F)||(I==E)||(I==D)||(I==C)||(I==B)||(I==A))
  101. {
  102. continue;
  103. }
  104.  
  105. if ((abs(I-G)==1)||(abs(I-F)==2)||(abs(I-E)==3)||(abs(I-D)==4)||(abs(I-C)==5)
  106. ||(abs(I-B)==6)||(abs(I-A)==7))
  107. {
  108. continue;
  109. }
  110. queen[8]=I;
  111.  
  112. cout<<" NO."<<setw(2)<<count<<": ";
  113. for (int i=1;i<=8;i++)
  114. {
  115. cout<<setw(3)<<queen[i];
  116. }
  117. count++;
  118. cout<<endl;
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. }
  127.  
  128. return 0;
  129. }
  130.   
  131.  
  1. #include <iostream>
  2. using namespace std;
  3. //递归算法解决八皇后问题。总共有92种解法。
  4. int c[], n=, cnt=;
  5. void print(){
  6.  
  7. for(int i=; i<n; ++i){
  8. for(int j=; j<n; ++j){
  9. if(j == c[i]) cout<<"1 ";
  10. else cout<<"0 ";
  11. }
  12. cout<<endl;
  13. }
  14. cout<<endl;
  15. }
  16. void search(int r){
  17. if(r == n){
  18. print();
  19. ++cnt;
  20. return;
  21. }
  22. for(int i=; i<n; ++i){
  23. c[r] = i;
  24. int ok = ;
  25. for(int j=; j<r; ++j)
  26. if(c[r]==c[j] || r-j==c[r]-c[j] || r-j==c[j]-c[r]){
  27. ok = ;
  28. break;
  29. }
  30. if(ok) search(r+);
  31. }
  32. }
  33. int main(){
  34. search();
  35. cout<<cnt<<endl;
  36. return ;
  37. }

C++实现八皇后问题的更多相关文章

  1. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

  2. 数据结构0103汉诺塔&八皇后

    主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...

  3. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  4. Python解决八皇后问题

    最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...

  5. OpenJudge1700:八皇后问题 //不属于基本法的基本玩意

    1700:八皇后问题//搜索 总时间限制:  10000ms 内存限制:  65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...

  6. C#八皇后问题 枚举值

    记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...

  7. 八皇后(dfs+回溯)

    重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...

  8. C语言解决八皇后问题

    #include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...

  9. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  10. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

随机推荐

  1. Orm框架开发之NewExpression合并问题

    之前都是看别人写博客,自己没有写博客的习惯.在工作的过程中,总是会碰到许多的技术问题.有很多时候想记录下来,后面一直有许多的问题等着解决.总想着等系统完成了,再回头总结下.往往结果就把这事抛到脑后了. ...

  2. 【转】谈“P=NP?”

    “P=NP?” 通常被认为是计算机科学最重要的问题.有一个叫Clay Math的研究所,甚至悬赏 100 万美元给解决它的人.可是我今天要告诉你的是,这个问题其实是不存在的,它根本不需要解决. 我并不 ...

  3. Linux内核同步 - spin_lock

    一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机 ...

  4. java实现简单webserver(分析+源码)

    在日常的开发中,我们用过非常多开源的webserver,比如tomcat.apache等等.如今我们自己实现一个简单的webserver,主要的功能就是用户点击要訪问的资源,server将资源发送到c ...

  5. sklearn 中的交叉验证

    sklearn中的交叉验证(Cross-Validation) sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sklearn中关于交叉验证的 ...

  6. Gitbook 生成 pdf 中文字体错乱问题解决办法

    Gitbook 生成 pdf 中文字体错乱问题解决办法   用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, ...

  7. [Jobdu] 题目1214:丑数

    题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...

  8. Linode中的Network Helper

    Linode主机vps有一个很好的网络配置工具:Network Helper,他可以在系统启动的时候,根据你的操作系统,以及检测到的网络配置等信息,自动配置好网络,非常有用. 官方文档: Networ ...

  9. 基于FPGA的异步FIFO设计

    今天要介绍的异步FIFO,可以有不同的读写时钟,即不同的时钟域.由于异步FIFO没有外部地址端口,因此内部采用读写指针并顺序读写,即先写进FIFO的数据先读取(简称先进先出).这里的读写指针是异步的, ...

  10. Codeforces 441C Valera and Tubes

    题目链接:Codeforces 441C Valera and Tubes 没看到r >= 2一直错.让前几个管子占用2个格子.最后一个把剩下的都占用了.假设问题有解.这样做一定有解.其它策略就 ...