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

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

http://blog.csdn.net/zhong317/article/details/4586131

 

8皇后之间需满足:

             1.不在同一行上

             2.不在同一列上

             3.不在同一斜线上

             4.不在同一反斜线上

 

假设前面1列的棋子放在第3行,那当前列不能放的位置就一定是3行,2行,4行。因为如果放在这三行上就分别跟前一列的棋子同在一行、同在斜线、同在反斜线上,不符合我们的要求。现在我们用cols数组来表示8个列棋子所放的行数,数组下标从0开始,其中数组下标表示列数,数组的元素值表示该列棋子所在行数,当前列为N(N>=0,N<8),即cols[N-1]=3,则有:

                          

                      cols[N] != cols[N-1](=3,表示不在同一行)

                     

                      cols[N] != cols[N-1]-1(=3-1=2,表示不在同一斜线上)

                     

                      cols[N]!=cols[N-1]+1(=3+1,表示不在同一反斜线上)

 

      这里我们注意到,如果N-2列存在的话,那么我们还要考虑当前列N不与N-2列的棋子同行,同斜线,同反斜线。把当前列N的前面的某一列设为m,则m的所有取值为{m>=0,m<N}的集合,故又可在上面式子的基础,归纳为如下:

                   

                    cols[N] != cols[m](与第m列的棋子不在同一行)

                   

                    cols[N] != cols­­[m] -(N-m)(>=0 ,与第m列的棋子不在同一斜线上)

                   

                    cols[N] != cols­­[m] + (N-m)  (<=8-1,与第m列的棋子不在同一反斜线上)          

 

public class Queen8 {         public static int num = 0; //累计方案总数          public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数          public static int[] cols = new int[MAXQUEEN]; //定义cols数组,表示8列棋子摆放情况 ,第k列放在第cols[k]行                  public void  getArrangement(int n){          //n表示         //遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true           boolean[] rows = new boolean[MAXQUEEN];           for(int i=0;i
= 0)rows[cols[i]-d]=true; //n不能与i在同一斜线上 if(cols[i]+d <= MAXQUEEN-1)rows[cols[i]+d]=true; //n不能与i在同一反斜线上 } for(int i=0;i

 

转载于:https://www.cnblogs.com/joshsung/p/7446006.html

你可能感兴趣的文章
|Vijos|图论最短路|P1082 丛林冒险
查看>>
iOS开发——获取本设备IP
查看>>
20145239杜文超 《Java程序设计》第7周学习总结
查看>>
冒泡排序(C实现)
查看>>
Swift -> RunTime(动态性) 问题 浅析
查看>>
<虚树+树型DP> SDOI2011消耗战
查看>>
算法啊算法
查看>>
安装完Anaconda python 3.7,想使用python3.6方法
查看>>
有意公司可联系我,我会提交我的简历!
查看>>
组播协议——IGMP v2报文头介绍
查看>>
微信小程序之----问题
查看>>
thinkphp整合Ueditor编辑器
查看>>
小程序
查看>>
oracle汇编03
查看>>
UITextInputMode
查看>>
hdu 3790 最短路径问题
查看>>
hdu 3105 Fred's Lotto Tickets (水)
查看>>
C# 获取进程或线程的相关信息
查看>>
xcode调试打印QString
查看>>
Windows 7 常用快捷键 命令
查看>>