回溯算法之八皇后问题(Java实现)

要求用回溯法求解 8-皇后问题

八皇后问题:使放置在 8*8 棋盘上的 8 个皇后彼此不受攻击。code

即:任何两个皇后都不在同一行、同一列或同一斜线上。class

请输出 8 皇后问题的全部可行解的总数。static

public class EightQueen {
	
    public static int[][] array = new int[8][8];
    public static int sum;
	
    public static void main(String[] args) {
		
        search(0);
        System.out.println(sum);
		
    }
	
    public static void search(int i){
        if(i > 7){
            sum++;
            return;
        }
        for(int j = 0; j < 8; j++){
            if(check(i, j)){
                array[i][j] = 1;
                search(i+1);
                array[i][j] = 0;
            }
        }
    }
	
    public static boolean check(int i, int j){
        for(int k = 0; k < i; k++){
            if(array[k][j] == 1){
                return false;
            }
        }
		
        for(int m = i-1, n = j-1; m>=0&& n>=0; m--, n--){
            if(array[m][n] == 1){
                return false;
            }
        }
		
        for(int m = i-1, n = j+1; m>=0&& n<=7; m--, n++){
            if(array[m][n] == 1){
                return false;
            }
        }
        return true;
    }
}
相关文章
相关标签/搜索