八皇后问题

横竖斜一条直线上不允许两个棋子
先把第一个棋子放好(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;
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 有关国际象棋的问题很多,八皇后问题就是其中相当著名的一个。在 8×8 的国际象棋棋盘中,放入 8 个皇后,使它们不...
    小黄鸭呀阅读 373评论 0 0
  • 参考小白带你学--回溯算法[https://zhuanlan.zhihu.com/p/54275352]LeetC...
    合肥黑阅读 1,588评论 1 0
  • 八皇后问题 皇后:国际象棋中威力最强的一颗棋子,走法是横、直、斜走均可,格数不限,不可越子 国际象棋:在8*8的方...
    鲁索德阅读 3,517评论 5 2
  • 1.基本原理 八皇后问题是一道趣味经典的算法问题。详细描述为:在8*8棋盘内使8个皇后棋子无冲突地摆放。在国际象棋...
    一路向后阅读 361评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,753评论 0 5