八皇后

理论;

在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

解法(回溯法):

java解法;

package 经典;

public class EightQueen2{
    public static final int MAX=8;
    public static int num=0;
    public static int[] queen=new int[MAX];
    
    public static void main(String []args){
        EightQueen2 queen=new EightQueen2();
        queen.backTrack(0);
    }
    
    public boolean place(int n){
        
        for(int i=0; i<n; i++)
        {
            if(queen[i]==queen[n] || Math.abs(queen[i]-queen[n])==(n-i))
                return false;
        }
        return true;
    }
    
    public void backTrack(int n){
    
        for(int i=0; i<MAX; i++)
        {
            queen[n]=i;
            
            if(place(n))
            {
                if(n==MAX-1)
                    showAnswer();
                else
                {
                    backTrack(n+1);
                }
            }
        }

    }

    private void showAnswer() {
        // TODO Auto-generated method stub
        ++num;
        System.out.println("解答:"+num);
        
        for(int i=0; i<MAX; i++)
        {
            for(int j=0; j<MAX; j++)
            {
                if(queen[i]==j)
                    System.out.print("Q");
                else
                    System.out.print(" . ");
            }
            System.out.println();
        }
    }
}
原文地址:https://www.cnblogs.com/huangcongcong/p/4006714.html