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();
		}
	}
}

点赞