java实现八皇后问题找出所有的八皇后解

package eight_queen;
/**
 * 这就是解出所有92种解法的最终代码
 * @author lenovo
 *
 */
public class EightQueen3 {
    
    static int count = 0;
    static int [][] chess = new int [8][8];
    public static void main(String[] args) {
        settleQueen(0);
        System.out.println("共有"+count+"种解法");
        
    }
    public static void settleQueen(int n){
        if(n==8){
            count++;
            System.out.println("第"+count+"种方法");
            printBoard(chess);
        }else{
            for(int i=0;i<8;i++){
                //把该行清零,防止有残余的皇后(1)
                for(int j=0;j<8;j++){
                    chess[n][j]=0;
                }
                
                if(checkBoard(chess,n,i)){	
                    chess[n][i]=1;
                    settleQueen(n+1);
                }
            }
        }
    }
    public static boolean checkBoard(int [][] arr, int x,int y){
        //判断列
        for(int i=x;i>=0;i--){
            if(arr[i][y]==1){
                return false;
            }
        }
        //判断左上到右下对角线
        for(int i=x,j=y;i>=0 && j>=0;i--,j--){
            if(arr[i][j]==1){
                return false;
            }
        }
        //判断右上到左下对角线
        for(int i=x,j=y;i>=0 && j<arr.length;i--,j++){
            if(arr[i][j]==1){
                return false;
            }
        }
        return true;
    }
    
    public static void printBoard(int[][] arr){
        for(int i = 0;i<arr.length;i++){
            for(int j = 0;j<arr[i].length;j++){
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }
    public static void initBoard(int [][] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                arr[i][j]=0;
            }
        }
    }
}

该方法使用了java中的二维数组来实现,因本人水平有限,可能会有错漏,望指正,共同学习进步。

    原文作者:八皇后问题
    原文地址: https://blog.csdn.net/weixin_35665919/article/details/79488110
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞