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<row;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){
		<span style="color:#ff0000;">if(row==MAXQUEEN){
			sum++;
			printBoard();
			return;
		}</span>
		for(int i=0;i<MAXQUEEN;i++){
			columnForRow[row]=i;
			if(check(row)){
				placeQueue(row+1);
			}
		}
	}
//	输出结果
	public static void printBoard(){
		System.out.println("第"+sum+"个走法:");
		for(int i=0;i<MAXQUEEN;i++){
			for(int j=0;j<MAXQUEEN;j++){
				if(j!=columnForRow[i]){
					System.out.print("+");
				}else System.out.print("Q");
			}System.out.println();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值