java 面向过程解决八皇后问题

8皇后问题背景

问题起源
8皇后问题最早由国际象棋棋手马克斯·贝瑟尔于1848年提出。数学天才高斯曾研究过此问题,并给出了76种解(实际为92种)。它属于更广义的N皇后问题(N×N棋盘放置N个皇后),是回溯算法的经典案例。

核心规则
在8×8棋盘上放置8个皇后,要求任意两个皇后不能:

  1. 处于同一行
  2. 处于同一列
  3. 处于同一对角线(主对角线或反对角线)

数学意义

  • 总共有 92种独立解(去除旋转和对称后为12种基本解)
  • 时间复杂度:最坏情况 O(N!),是NP难问题的代表
  • 应用场景:算法教学、并行计算测试、约束满足问题建模

Java面向过程实现

public class Queen8 {
   
   
    //定义最大的行
    int max = 8;
    //创建一维数组存储每行的列的位置
    int[] array = new int[max];
    //结果数
    static int count = 0;
    //检查是否冲突的次数
    static int judgecount = 0;


    public static void main(String[] args) {
   
   
        Queen8 queen = new Queen8();
        queen.check(0);
        System.out.printf("一共有%d总解法", count);
        System.out.println();
        System.out.printf("一共有%d次判断冲突", judgecount);
    }


    //放置皇后
    private void check(int n) {
   
   
        if (n == max) {
   
     //已经放置好
            //打印函数
            print();
            return;
        }
        //依次放置皇后的列数
        for (int i = 0; i < max; i++) {
   
   
            //把皇后放置到该行的第一列
            array[n] = i;
            //判断当前皇后在i列时是否冲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值