1. 程式人生 > 實用技巧 >回溯演算法之八皇后問題(Java實現)

回溯演算法之八皇后問題(Java實現)

要求用回溯法求解 8-皇后問題

八皇后問題:使放置在 8*8 棋盤上的 8 個皇后彼此不受攻擊。

即:任何兩個皇后都不在同一行、同一列或同一斜線上。

請輸出 8 皇后問題的所有可行解的總數。

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