博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】八皇后问题
阅读量:6994 次
发布时间:2019-06-27

本文共 808 字,大约阅读时间需要 2 分钟。

转载请注明出处:

    剑指offer上解决八皇后问题,没实用传统的递归或非递归回溯法,而是用了非常巧妙的全排列法。

    先说下八皇后问题:在8 X 8的国际象棋上摆放八个皇后,使其不能相互攻击,即随意两个皇后不得处于同一行,同一列或者允许对角线上,求出全部符合条件的摆法。

    全排列解决八皇后问题的思路例如以下:

    因为8个皇后不能处在同一行,那么肯定每一个皇后占领一行,这样能够定义一个数组A[8],数组中第i个数字,即A[i]表示位于第i行的皇后的列号。先把数组A[8]分别用0-7初始化,接下来对该数组做全排列,因为我们用0-7这7个不同的数字初始化数组,因此随意两个皇后肯定也不同列,那么我们仅仅须要推断每一个排列相应的8个皇后中是否有随意两个在同一对角线上就可以,即对于数组的两个下标i和j,假设i-j==A[i]-A[j]或i-j==A[j]-A[i],则觉得有两个元素位于了同一个对角线上,则该排列不符合条件。

    代码例如以下:

#include
void swap(int *a,int *b){ int temp = *a; *a = *b; *b = temp;}/*假设有符合条件的摆法,打印出全部的摆法,否则,什么也不打印*/void CubVertex(int *A,int len,int begin){ if(A==NULL || len!=8) return; if(begin == len-1) { int i,j; bool can = true; //是否又符合条件的摆法 for(i=0;i

    測试结果:

    四皇后:

    四皇后总共同拥有2中摆法。

    1、3、0、2的意思是指:第0行上的皇后摆放在第1个位置(从0開始),第1行上的皇后摆放在第3个位置,第3行上的皇后摆放在第0个位置,第4行上的皇后摆放在第2个位置。

    八皇后:

    八皇后总共同拥有92种摆法。

   

你可能感兴趣的文章
【java】构建工具,maven,ant,gradlew
查看>>
LintCode_14 二分查找
查看>>
04-python3.5-模拟三级菜单-省-县-区域--01
查看>>
算法竞赛入门经典chapter4:本章小结
查看>>
asp.net中的<%%>形式的详细用法实例讲解
查看>>
【LeetCode】3. Longest Substring Without Repeating Characters
查看>>
dao层结构的设计方案
查看>>
(一) 从零开始搭建Spark Standalone集群环境搭建
查看>>
非负矩阵分解(4):NMF算法和聚类算法的联系与区别
查看>>
统计学习方法:核函数(Kernel function)
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
RabbitMQ 之 订阅模式 Publish/Subscribe
查看>>
J-6 面向对象
查看>>
文件上传,跨浏览器统一的样式
查看>>
LeetCode OJ - Minimum && Maximum Depth of Binary Tree
查看>>
51Nod1130斯特林近似
查看>>
Java环境变量的设置
查看>>
AC日记——灾后重建 洛谷 P1119
查看>>
compass的使用
查看>>
Codeforces #263 div2 解题报告
查看>>