美文网首页
八皇后问题之java实现

八皇后问题之java实现

作者: 雨夜微凉886 | 来源:发表于2019-07-23 00:03 被阅读0次

    1.八皇后指在八行八列的的矩阵上放八个皇后,任意两个皇后不在同一行或同一列,或同一斜线上。

    2.代码实现

    public class Queue8 {
        //八皇后的维数
        static int max=8;
        //用一维数组表示八皇后解法,index表示行号,值表示列,为方便起见这里不用二维数组表示。
        static int[]arry=new int[8];
        static int count=0;
        public static void main(String[] args) {
            Queue8.place(0);
            System.out.printf("总共%d种结果",count);
        }
        
        //放入第n个皇后
        public static void place(int n) {
            //递归的终止的条件
            if(n==max) {
                print();
                return;
            }
            //这里包含回溯思想,重点推敲,核心代码。
            for (int i = 0; i < max; i++) {
                arry[n]=i;
                if(judge(n)) {
                    place(n+1);
                }
            }
        }
        //判断放入第N个皇后的位置是否合适,主要判断与前N-1个皇后的相对位置是否冲突。
        private static boolean judge(int n) {
            for (int i = 0; i < n; i++) {
                //Math.abs(i-n)==Math.abs(arry[i]-arry[n])指代不出于在同一斜线上,想象成一个xy坐标系,行差不等于列差就不位于同一斜线
                if(arry[i]==arry[n]||Math.abs(i-n)==Math.abs(arry[i]-arry[n])) {
                    return false;
                }
            }
            return true;
        }
        
        //输出符合条件的结果
        private static void print() {
            count++;
            for(int i=0;i<max;i++) {
                System.out.print(arry[i]+" ");
            }
            System.out.println();
        }
    }
    
    
    以下是输出的答案:
    0 4 7 5 2 6 1 3 
    0 5 7 2 6 3 1 4 
    0 6 3 5 7 1 4 2 
    0 6 4 7 1 3 5 2 
    1 3 5 7 2 0 6 4 
    1 4 6 0 2 7 5 3 
    1 4 6 3 0 7 5 2 
    1 5 0 6 3 7 2 4 
    1 5 7 2 0 3 6 4 
    1 6 2 5 7 4 0 3 
    1 6 4 7 0 3 5 2 
    1 7 5 0 2 4 6 3 
    2 0 6 4 7 1 3 5 
    2 4 1 7 0 6 3 5 
    2 4 1 7 5 3 6 0 
    2 4 6 0 3 1 7 5 
    2 4 7 3 0 6 1 5 
    2 5 1 4 7 0 6 3 
    2 5 1 6 0 3 7 4 
    2 5 1 6 4 0 7 3 
    2 5 3 0 7 4 6 1 
    2 5 3 1 7 4 6 0 
    2 5 7 0 3 6 4 1 
    2 5 7 0 4 6 1 3 
    2 5 7 1 3 0 6 4 
    2 6 1 7 4 0 3 5 
    2 6 1 7 5 3 0 4 
    2 7 3 6 0 5 1 4 
    3 0 4 7 1 6 2 5 
    3 0 4 7 5 2 6 1 
    3 1 4 7 5 0 2 6 
    3 1 6 2 5 7 0 4 
    3 1 6 2 5 7 4 0 
    3 1 6 4 0 7 5 2 
    3 1 7 4 6 0 2 5 
    3 1 7 5 0 2 4 6 
    3 5 0 4 1 7 2 6 
    3 5 7 1 6 0 2 4 
    3 5 7 2 0 6 4 1 
    3 6 0 7 4 1 5 2 
    3 6 2 7 1 4 0 5 
    3 6 4 1 5 0 2 7 
    3 6 4 2 0 5 7 1 
    3 7 0 2 5 1 6 4 
    3 7 0 4 6 1 5 2 
    3 7 4 2 0 6 1 5 
    4 0 3 5 7 1 6 2 
    4 0 7 3 1 6 2 5 
    4 0 7 5 2 6 1 3 
    4 1 3 5 7 2 0 6 
    4 1 3 6 2 7 5 0 
    4 1 5 0 6 3 7 2 
    4 1 7 0 3 6 2 5 
    4 2 0 5 7 1 3 6 
    4 2 0 6 1 7 5 3 
    4 2 7 3 6 0 5 1 
    4 6 0 2 7 5 3 1 
    4 6 0 3 1 7 5 2 
    4 6 1 3 7 0 2 5 
    4 6 1 5 2 0 3 7 
    4 6 1 5 2 0 7 3 
    4 6 3 0 2 7 5 1 
    4 7 3 0 2 5 1 6 
    4 7 3 0 6 1 5 2 
    5 0 4 1 7 2 6 3 
    5 1 6 0 2 4 7 3 
    5 1 6 0 3 7 4 2 
    5 2 0 6 4 7 1 3 
    5 2 0 7 3 1 6 4 
    5 2 0 7 4 1 3 6 
    5 2 4 6 0 3 1 7 
    5 2 4 7 0 3 1 6 
    5 2 6 1 3 7 0 4 
    5 2 6 1 7 4 0 3 
    5 2 6 3 0 7 1 4 
    5 3 0 4 7 1 6 2 
    5 3 1 7 4 6 0 2 
    5 3 6 0 2 4 1 7 
    5 3 6 0 7 1 4 2 
    5 7 1 3 0 6 4 2 
    6 0 2 7 5 3 1 4 
    6 1 3 0 7 4 2 5 
    6 1 5 2 0 3 7 4 
    6 2 0 5 7 4 1 3 
    6 2 7 1 4 0 5 3 
    6 3 1 4 7 0 2 5 
    6 3 1 7 5 0 2 4 
    6 4 2 0 5 7 1 3 
    7 1 3 0 6 4 2 5 
    7 1 4 2 0 6 3 5 
    7 2 0 5 1 4 6 3 
    7 3 0 2 5 1 6 4 
    总共92种结果
    
    

    相关文章

      网友评论

          本文标题:八皇后问题之java实现

          本文链接:https://www.haomeiwen.com/subject/bdcnlctx.html