美文网首页
八皇后问题之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实现

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

  • 八皇后问题 Python实现

    八皇后问题 Python实现 田田田 八皇后问题:国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子。皇后这种棋...

  • 八皇后和约瑟夫问题

    今天在写C语言报告的时候,收获了两种算法的实现,分别是八皇后和约瑟夫问题。 八皇后:总的来说,八皇后问题就是一种b...

  • 使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子。正确答...

  • N皇后问题(Java实现)

    问题描述在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都不能出...

  • 递归--八皇后问题(Java)

    递归--八皇后问题(Java) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有...

  • java八皇后问题详解

    八皇后问题,一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:...

  • 八皇后问题

    采用试探回溯策略,通过栈记录查找结果,实现八皇后问题求解。 测试代码

  • 11.数据结构—八皇后问题(回溯法)

    11.1 八皇后问题 八皇后问题是以国际象棋为背景的问题:有八个皇后(可以当成八个棋子),如何在 88 的棋盘中放...

  • 算法(03)回溯

    八皇后问题

网友评论

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

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