八皇后问题

package com.ants;

import java.util.Map;

/**
 * 8皇后问题
 */
public class EightQueenProblem {
    int max = 8;
    int[] array = new int[max];  //存放摆放位置
    int count;

    public static void main(String[] args) {
        EightQueenProblem eightQueenProblem = new EightQueenProblem();
        eightQueenProblem.check(0);
        System.out.println("一共有" + eightQueenProblem.count + "种方案");
    }


    public void check(int num) {
        //八个皇后已经放好,直接打印这个
        if (num == max) {
            print();
            return;
        }
//        依次放入皇后
        for (int i = 0; i < max; i++) {
//            先把当前皇后n,放入第一列
            array[num] = i;
//            判断是否冲突
            if (isNojudge(num)) {  //如果不冲突
                check(num + 1);
            }
        }
    }

    /**
     * @param n 摆放第几个皇后
     * @return 返回是否冲突
     */
    public boolean isNojudge(int n) {
        //{0,4,7,5,2,6,1,3} 索引代表行索引,值代表列索引
        for (int i = 0; i < n; i++) {
//            冲突 array[i]==array[queueNum] 判断是否在一列
            // Math.abs(queueNum-i)==Math.abs(array[queueNum]-array[i])是否是在同一个斜线
            if (array[i] == array[n] || Math.abs(n - i) == Math.abs(array[n] - array[i])) {
                return false;
            }
        }
//        不冲突
        return true;
    }


    /**
     * 打印存放
     */
    public void print() {
        count++;
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + "");
        }
        System.out.println();
    }
}

你可能感兴趣的:(八皇后问题)