1. 程式人生 > 實用技巧 >8皇后到N皇后問題

8皇后到N皇后問題

import java.util.Scanner;

public class EightQueens {

private int methods;
private int chessAmounts;
private int tags [][];

public EightQueens(int chessAmounts){
    this.chessAmounts=chessAmounts;
    methods=0;
    tags=new int[chessAmounts+1][chessAmounts+1];
}

//打標記
private void putTags(int x,int y,int status){
    for(int i=1;i<=chessAmounts;i++){
        tags[x][i]+=status;
        tags[i][y]+=status;
    }
    int m=x+y,n=x-y,t=x;
    while(t<=chessAmounts){
        if(m-t>=1&&m-t<=chessAmounts) tags[t][m-t]+=status;
        if(t-n>=1&&t-n<=chessAmounts) tags[t][t-n]+=status;
        t++;
    }
}
//DFS
public void putChess(int step){
    if(step>chessAmounts) {
        methods++;
        return ;
    }
    for(int i=1;i<=chessAmounts;i++){
        if(tags[step][i]==0){
            putTags(step,i,1);
            putChess(step+1);
            putTags(step,i,-1);
        }
    }
}

public static void main(String[] args) {

	//輸入棋子數
    Scanner in =new Scanner(System.in);
    int chessAmounts=in.nextInt();
    
    //初始化
    EightQueens eightQueens = new EightQueens(chessAmounts);
    //深度優先搜尋
    eightQueens.putChess(1);
    //輸出
    System.out.println(eightQueens.methods);

}

}