java八皇后问题实验报告_[Java教程]八皇后问题

本文介绍了经典的八皇后问题,探讨了如何通过递归法和回溯法解决该问题。在递归法中,通过判断皇后位置避免同一列和斜线冲突,进行深度搜索找到解。而在回溯法中,通过不断尝试放置皇后并回溯寻找所有可能的解决方案。最终,两种方法都得到了92个不同的解决方案。
摘要由CSDN通过智能技术生成

[Java教程]八皇后问题

0 2016-09-11 13:00:07

八皇后问题是个很经典的递归、迭代问题。解决思路就是只要保证所有皇后不在同一列和同斜线上。

假设就j,k为两个皇后所在的行 x[j]、x[k]表示两个皇后的位置。当两个皇后在同一列或同斜线上 可以用数学式子来表达|j-k|=|x[j]-x[k]|、x[j]=x[k]。所有当这两个条件不满足的时候问题就能解决。

解决方法一:递归法

private int n; //皇后个数

private int sum; //解的个数

private int x[];//当前解

public EightQueens(){

this.n=8;

this.sum=0;

this.x=new int [n+1];

}

/**

* 约定i表示行 x[i]表示位置

*/

public void jie(int t){

if(t>n){/*如果t>n表示搜索到叶子节点 一次深度搜索结束*/

sum++;

}else{

for(int i=1;i<=n;i++){

x[t]=i;

if(place(t)){

jie(t+1);

}

}

}

}

/**

* 判断函数,判断是否在一列上或者在同一条斜线上

* @param k

* @return

*/

public boolean place(int k){

for(int j=1;j

if((Math.abs(j-k))==(Math.abs(x[j]-x[k]))||(x[j]==x[k])){

return false;

}

}

return true;

}

运行结果 :92个

解决方法二:回溯

while(t>=1){

x[t]=x[t]+1; //在下一列放置第k个皇后

while(x[t]<=8&&!eightqueens.place(t)){

x[t]=x[t]+1;//搜索下一列

if(x[t]<=8&&t==8)//得到一个输出{

eightqueens.sum++;

}

else if(x[t]<=8&&t<8)

t=t+1;//放置下一个皇后

else{

x[t]=0;//重置x[k],回溯

t=t-1;

}

}

运行结果 :92个

本文网址:http://www.shaoqun.com/a/250344.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值