java中经典八皇后难题_Java实现经典八皇后的问题

今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分。现在还是有点不是很明白。代码如下,已经实现运行。

public class EightQueen {

public static int sum = 0; //累计方法总数

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

public static int []columnForRow = new int[MAXQUEEN]; //定义数组,表示8列棋子摆放情况

public static void main(String[] args) {

placeQueue(0);

System.out.println();

System.out.println("共有"+sum+"走法。");

}

//检查所放位子是否合法。

public static boolean check(int row){

boolean t=true;

for(int i=0;i

/*

* 放在同一列,绝对值=0;

* 放在对角线,绝对值=1;

* 放在斜对角线,绝对值=-1

**/

int diff=Math.abs(columnForRow[row]-columnForRow[i]);

if ((diff==0)||(diff==row-i)){

t=false;break;

}

}

return t;

}

//放棋子的具体过程。

public static void placeQueue(int row){

if(row==MAXQUEEN){

sum++;

printBoard();

return;

}

for(int i=0;i

columnForRow[row]=i;

if(check(row)){

placeQueue(row+1);

}

}

}

//输出结果

public static void printBoard(){

System.out.println("第"+sum+"个走法:");

for(int i=0;i

for(int j=0;j

if(j!=columnForRow[i]){

System.out.print("+");

}else System.out.print("Q");

}System.out.println();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值