美文网首页
递归回溯算法与八皇后问题

递归回溯算法与八皇后问题

作者: 墨宇暗黑 | 来源:发表于2022-02-13 18:49 被阅读0次

八皇后问题:在一个8x8的格子里面摆放8个皇后,每两个皇后不能处于同一列或则同一行,或则同一斜线
对于这个问题就需要用到回溯算法,我们在没走一步的时候去进行判断这一步是否符合规则,不符合规则则回退一步,不过采用递归的算法可能没有那么容易看出回溯的思想

解决思路,定义一个长度为8的整型数组new int[8],第一个代表第一行第i列,第二个代表第二行第i列
来看以下代码,需要根据自己取理解

public class Huanghou8 {
    private static int[] array = new int[8];
    private static int count = 0;
    public static void main(String[] args) {
        check(0);
        System.out.println(count);
    }
    //这个是主要的递归方法
    public static void check(int n){
        if(n == 8){
            print();
            return;
        }
        for (int i = 0; i < 8; i++) {
            array[n] = i;
            //如果没有违反规则则走下一步棋子
            if(judge(n)){
                check(n+1);
            }
        }
    }
    //将每一步棋子进行判断,是否违反了规则
    public static boolean judge(int n){
        for (int i = 0; i < n; i++) {
            if(array[i]==array[n] || Math.abs(n-i) == Math.abs(array[n] - array[i])){
                return false;
            }
        }
        return true;
    }
    //将每一种结果进行输出
    public static void print(){
        count++;
        for (int i : array) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

相关文章

  • 递归回溯算法与八皇后问题

    八皇后问题:在一个8x8的格子里面摆放8个皇后,每两个皇后不能处于同一列或则同一行,或则同一斜线对于这个问题就需要...

  • 递归回溯算法:八皇后问题

    1、环境配置: 系统:win10 编程语言:C++ 编译器:DevC++ 2、算法思想: 2.1、回溯的基本思想:...

  • LeetCode-N Queens

    N皇后问题。经典回溯问题: 以下是递归及非递归的方法:

  • 递归回溯算法解决八皇后问题

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

  • 算法(11):回溯法

    今天补一下回溯法,别的不说,n皇后问题必须列出来才行~ 目录:算法:附录算法(1):递归算法(2):链表算法(3)...

  • 算法入门教程-冒泡排序

    上节我们分别通过案例迷宫和八皇后亲自体验了递归回溯算法的思想,本节我们学习常见八大算法之一的冒泡排序算法,亲自感受...

  • 回溯算法 八皇后问题

    参考小白带你学--回溯算法[https://zhuanlan.zhihu.com/p/54275352]LeetC...

  • 回溯算法--八皇后问题

    8x8 的棋盘,8 个棋子(皇后),每个棋子所在的行、列、对角线都不能有另一个棋子

  • 回溯算法:八皇后问题

    调用执行:

  • 递归2-回溯与递归

    I. 回溯算法基础 回溯与递归的区别和联系  很多人不理解回溯与递归到底是什么关系。其实很简单,回溯算法是一种算法...

网友评论

      本文标题:递归回溯算法与八皇后问题

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