Queen’s Eight Questions (recursive)

Queen’s Eight Questions (recursive)
How can I place eight queens on an 8×8 international chessboard such that no queen can directly eat another queen? To achieve this goal, no two queens can be the sameRun, runverticalorcurved linebosses.


public class EightQueen {
	public static int count=0;
	
	public static boolean noDanger(int row,int col,int chess[][]) {	
		
		
		for(int i=0;i<8;i++) {
			if(chess[i][col]==1)
				return false;
		}
		
		
		for(int i=1;row-i>=0&&col-i>=0;i++) {
			if(chess[row-i][col-i]==1)
				return false;
		}
		
		
		for(int i=1;row+i<8&&col-i>=0;i++) {
			if(chess[row+i][col-i]==1)
				return false;
		}
		
		
		for(int i=1;row-i>=0&&col+i<8;i++) {
			if(chess[row-i][col+i]==1)
				return false;
		}
		
		
		for(int i=1;row+i<8&&col+i<8;i++) {
			if(chess[row+i][col+i]==1)
				return false;
		}
		
		return true;
	}


	public static void EQueen(int row,int col,int chess[][]) {
		
		int chess2[][];
		chess2 = chess.clone();
		
		
		if(row == 8) {
			count++;
			System.out.println(""+count+"Добрый");
			for(int i=0;i<row;i++) {
				for(int j=0;j<col;j++) {
					System.out.print(chess2[i][j]+" ");
				}
				System.out.println();
			}
		}
		
		else{
			
			for(int j=0;j<col;j++) {
				
				if(noDanger(row,j,chess2)) {
					chess2[row][j] = 1;
					EQueen(row+1,col,chess2);
				}
				
				chess2[row][j] = 0;
			}
			
		}
			
		
		
	}

	public static void main(String[] args) {
		int chess[][] = new int[8][8];
		
		EQueen(0,8,chess);

	}

}

Another way to judge the slope in a solution is the Nodganger function:

		int plus = row+col; 
		int minus = row-col; 
		
		for(int i=0;i<8;i++) {
			for(int j=0;j<8;j++) {
				if(i+j==plus&&chess[i][j]==1)
					return false;
				if(i-j==minus&&chess[i][j]==1)
					return false;
			}
		}
		
		return true;

Leave a Comment