八皇后问题

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 09:25:00
public class EightQueenDemo {    public static int count = 0;    public boolean check(int array[][], int num, int i, int j) {        //每行每列都只有一个棋子        for(int k = 0; k < num; k++) {            if(array[i][k] == 1)                return false;            if(array[k][j] == 1)                return false;        }        /*把i和j的值分别置为比当前棋子位置的值少一,即为左上角一格,        i >= 0 && j >= 0;控制i和j在棋盘范围内,        --i, --j;向左上角移动        */        for(int s = i - 1, t = j - 1; s >= 0 && t >= 0; s--, t--) {            if(array[s][t] == 1)                return false;        }        /*i的值为当前棋子的行值减一,j的值为当前棋子的列值加一,即为右上角一格,         i != N && j != N; 控制i和j在棋盘范围内,         --i, ++j;向右上角移动         */        for(int s = i - 1, t = j + 1; s >= 0 && t < num; s--, t++) {            if(array[s][t] == 1)                return false;        }        return true;    }    private void printQueen(int[][] array, int num) {        System.out.println(num + "皇后的一种解法:");        for(int i = 0; i < num; i++) {            for(int j = 0; j < num; j++) {                System.out.print(array[i][j] + " ");            }            System.out.println();        }    }    public void find(int[][] array, int num, int row) {        if(row > 7) {            count++;            printQueen(array, num);            return;        }        for(int col = 0; col < num; col++) {            if(check(array, num, row, col)) {                array[row][col] = 1;                find(array, num, row + 1);                array[row][col] = 0;//一种解法找完后,将本位置重新置为0            }        }    }    public static void main(String[] args) {        int num = 8;        int[][] array = new int[num][num];        EightQueenDemo eqd = new EightQueenDemo();        eqd.find(array, num, 0);        System.out.println("八皇后一共有:" + count + "种解法");    }}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!