八皇后问题

2021-03-01  本文已影响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;
  }
}
上一篇 下一篇

猜你喜欢

热点阅读