美文网首页
八皇后问题

八皇后问题

作者: 粑粑八成 | 来源:发表于2021-03-01 09:53 被阅读0次

横竖斜一条直线上不允许两个棋子
先把第一个棋子放好(main方法中的循环)
从第二个开始递归

public class Queen8 {

  public static void main(String[] args) {
    List<int[]> list = new ArrayList<>();
    for (int i = 0; i < 8; i++) {
      int[] array = new int[8];
      array[0] = i;
      loop(2, array, list);
    }
    System.out.println(list.size());
    list.forEach(o -> {
      System.out.println(Arrays.toString(o));
    });
  }

  /**
   * @param number 第几个皇后
   * @param array  解法
   * @author 2021-01-23 9:28
   */
//  05726314
  static void loop(int number, int[] array, List list) {
    if (number == 9) {
      list.add(Arrays.copyOf(array, 8));
      return;
    }
    for (int i = 0; i < 8; i++) {
      if (isOk(array, number, i)) {
        array[number - 1] = i;
        loop(number + 1, array, list);
      }
    }
  }

  static boolean isOk(int[] array, int number, int tempPosition) {
    for (int i = 0; i < number - 1; i++) {
      if (array[i] == tempPosition || Math.abs(array[i] - tempPosition) == Math
          .abs(i + 1 - number)) {
        return false;
      }
    }
    return true;
  }
}

相关文章

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

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

  • 算法(03)回溯

    八皇后问题

  • 八皇后问题(N皇后问题)

    八皇后问题是一个经典的递归回溯问题。 描述 八皇后问题是在一个 8*8 的棋盘上放置皇后,要求其放置后满足同一行,...

  • 八皇后问题

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

  • 八皇后问题

    问题的类别是回溯(backtrace). 回溯通常用递归实现。回溯中注意边界问题,避免越界。同时,剪枝可以减少ca...

  • 八皇后问题

    课堂上老师讲了广度优先搜索算法后让课下实现下八皇后问题,就突发奇想了很多实现方法,这里只把我的实现方式和实现代码粘...

  • 八皇后问题

    问题 八皇后问题是一个古老而著名的问题,是试探法的典型例题。该问题由19世纪数学家高斯1850年手工解决。原题为在...

  • 八皇后问题

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

  • 八皇后问题

    如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任两个皇后都不能处于同一条横行、纵行或斜线上。 先从第一列开...

  • 八皇后问题

    问题描述: 在8x8的网格上,放置皇后两个皇后,两个皇后之间不能在同一行,也不能在同一列,也不能在对角线上。 cl...

网友评论

      本文标题:八皇后问题

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