public class exer620{
    public static void main(String[] args){
        int[] queen;
        queen = new int[8];
        putIt(queen,0);
    }
    public static void putIt(int[] numf,int mf){
        if(mf == 8){//当递归完成时
            display(numf);
            System.out.print("\n\n");
        }
        else{
            for(int j = 0;j < 8;j++)
            {
                if(findInArray(numf,mf,j) || isDiagonal(numf,mf,j))
                    continue;
                else{
                    numf[mf] = j;
                    putIt(numf,mf+1);
                }
            }
            
        }
    }
    public static boolean findInArray(int[] numf,int mf,int nf){
    //判断是否在同一行上
        for(int i = 0;i < mf;i++){
            if(nf == numf[i])
                return true;
        }
        return false;
    }
    public static boolean isDiagonal(int[] numf,int mf,int nf){
    //判断是否在同一对角线上
        for(int i = 0;i < mf;i++){
            if(((mf - i) * (mf - i)) == ((nf - numf[i]) * (nf - numf[i])))
                return true;
        }
        return false;
    }
    public static void display(int[] numf){//显示每一行
        for(int u:numf){
            for(int i = 0;i < u;i++){
                System.out.print("[ ]");
            }
            System.out.print("[X]");
            for(int i = 0;i < 7 - u;i++){
                System.out.print("[ ]");
            }
            System.out.print("\n");
        }
    }
}

原理非常简单,每行放置一个皇后。 然后放下一行,判断与之前放置的皇后是否冲突。