八皇后非递归 java_java非递归方法实现八皇后问题

这个程序是从网上copy的,原程序是递归,我运用了原框架改写成了非递归方法。

public class Example {

public static int

num = 0; //累计方案总数

public static final

int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数

public static int[]

cols = new int[MAXQUEEN+1]; //定义cols数组,表示8列棋子摆放情况

public Example(){

//核心函数

getArrangement();

System.out.print("\n");

System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。");

}

public void

getArrangement(){

//主要函数。非递归方法。

for(int

i=1;i<=MAXQUEEN;i++)

cols[i]=0;

int k=1;

while(k

> 0)

{

cols[k]++;

//下一个位置

while((cols[k]<=MAXQUEEN)&&(!check(k)))

cols[k]++;   //找到一个位置

if(cols[k]

<= MAXQUEEN)  //若位置合法

if(k == MAXQUEEN) //一个解

{

num++;

printChessBoard();

}

else

//还不是解

k++;

else

//位置不合法

{

cols[k]=0;

k--;

}

}

}

boolean check(int k)

//检测合法函数

{

for(int i

= 1; i < k; i++)

if((Math.abs(k - i) ==Math.abs(cols[k] -

cols[i])) || cols[i] == cols[k])

return

false;//1.是否在同一斜线;2.是否位于同一列

return

true;

}

public void

printChessBoard(){

System.out.print("第"+num+"种走法 \n");

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

for(int

j=1;j<=MAXQUEEN;j++){

if(i==cols[j]){

System.out.print("Q ");

}else

System.out.print("+ ");

}

System.out.print("\n");

}

}

public static void

main(String args[]){

Example queen = new Example();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值