当前位置: 首页 > news >正文

八皇后问题

八皇后问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

具体思路可参考:

http://jpkc.onlinesjtu.com/CourseShare/datastructure/FlashInteractivePage/exp7.htm

 

思路:
nQueens(int row) { if(row == n) { //满足条件,输出 } for(i = 0;i < n;i++) { if(IsSafe) //若位置合适 { //下一个 } } }

代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 int n,num=1;
 4 int qu[100];
 5 
 6 void Print()
 7 {
 8     cout<<num++<<":    ";
 9     int i;
10     for(i = 0;i < n;i++)
11     {
12         cout<<qu[i]<<" ";
13     }    
14     cout<<endl;
15 }
16 
17 bool IsSafe(int row,int col)
18 {
19     for(int i=0;i<row;i++)
20     {
21         if(qu[i] == col)
22         {        
23             return false;
24         }
25         if((qu[i]+i) == (row+col))
26         {
27             return false;
28         }
29          if((qu[i]-i) == (col-row))
30         {
31             return false;
32         }
33     }
34     qu[row]=col;
35     return true;
36 }
37 
38 void nQueens(int row)
39 {
40     if(row == n)        
41     {
42         Print();
43         return ;
44     }
45     int i;
46     for(i = 0;i < n;i++)
47     {
48         if(IsSafe(row,i))
49         {
50             nQueens(row+1);
51         }
52     }
53 }
54 int main()
55 {
56     cin>>n;
57     nQueens(0);
58     return 0;
59 }

输入:

4

输出:

1: 1 3 0 2
2: 2 0 3 1

以第一种方法为例,有以下排列:

   
   
   
   

转载于:https://www.cnblogs.com/boyiliushui/p/5135543.html

相关文章:

  • Django学习(第一天:环境的搭建)
  • KVM虚拟机之空间大小问题
  • 物联网是这样改变我们生活的
  • Session只读的影响
  • 自定义Android系统级权限组
  • 对数据分析解决方案供应商而言 技术与业务性解决方案并重
  • iOS使用NSMutableAttributedString 实现富文本(一行文本里面不同字体大小)
  • 程序员如何提高职场价值 荐十大技巧
  • 微信红包外挂?只是你不知道
  • 网件(Netgear)路由器被曝严重的DNS漏洞
  • Python算法题----孙悟空吃蟠桃
  • Chrome漏洞可致恶意站点在用户在不知情的情况下录制音频和视频
  • Python算法题----最大公约数
  • CentOS 7下MySQL服务启动失败的解决思路
  • IIS应用程序池管理工具
  • 《深入 React 技术栈》
  • exports和module.exports
  • Java Agent 学习笔记
  • JAVA 学习IO流
  • leetcode98. Validate Binary Search Tree
  • mysql常用命令汇总
  • node入门
  • Python进阶细节
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Web标准制定过程
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从零开始学习部署
  • 大主子表关联的性能优化方法
  • 算法---两个栈实现一个队列
  • gunicorn工作原理
  • ​马来语翻译中文去哪比较好?
  • ​如何在iOS手机上查看应用日志
  • (03)光刻——半导体电路的绘制
  • (27)4.8 习题课
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Note)C++中的继承方式
  • (poj1.3.2)1791(构造法模拟)
  • (ZT)薛涌:谈贫说富
  • (篇九)MySQL常用内置函数
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四) 虚拟摄像头vivi体验
  • (转)C#调用WebService 基础
  • .NET 8.0 发布到 IIS
  • .Net CF下精确的计时器
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net framework profiles /.net framework 配置
  • .Net IOC框架入门之一 Unity
  • .NET Project Open Day(2011.11.13)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @Data注解的作用
  • @Transaction注解失效的几种场景(附有示例代码)
  • [20171102]视图v$session中process字段含义
  • [20190113]四校联考