八皇后单解和全解递归算法

八皇后问题:单个解和全解 自己写的代码,求解八皇后问题的单一解及全部解。写得并不好,不过还是小结下。 为了自己中途调试的直观,声明char chess[8][8],这个变量用来存放棋盘的实时状态,其中“*”表示空白的棋格,“Q”表示放置了皇后的棋格,所以比如说其中的一个解就表示成这样: #include #include int back_row[8],back_column[8]; void qu 阅读详情

八皇后单解 递归算法


#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 8

int num = 1;


int a[N] = { 0 };


void show()
{
    printf("Times %d\n", num++);
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (a[i] == j)
            {
                printf("X ");
            }
            else
            {
                printf("- ");
            }
        }
        printf("\n");
    }
    printf("\n");
}


int is_place_ok(int n, int c)
{
    for (int i = 0; i < n; i++)
    {
        if (a[i] == c || fabs(a[i] - c) == fabs(n - i))
        {
            return 0;
        }
    }
    return 1;
}

int mm = 0;

void add_queen(int n) //place the n_th queen n >= 0 and n < 8
{
    if (n >= N)
    {
        show();
    }
    else if (n < 0)
    {
        return;
    }
    else
    {

        for (; a[n] < N; a[n]++)
        {
            if (is_place_ok(n, a[n]))
            {
                break;
            }
        }
        if (a[n] < N)   //找到一个合适的位置 继续放置下一行皇后
        {
            a[n + 1] = 0;
            add_queen(n + 1);

        }
        else
        {
            //没找到  就回溯
            n--;
            a[n]++;
            add_queen(n);
        }

    }

}



void main()
{

    add_queen(0);


    system("pause");
}

八皇后全解 (92种解法) 递归算法


#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 8

int num = 1;


int a[N] = {0};


void show()
{
    printf("Times %d\n", num++);
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (a[i] == j)
            {
                printf("X ");
            }
            else
            {
                printf("- ");
            }
        }
        printf("\n");
    }
    printf("\n");
}


int is_place_ok(int n, int c)
{
    for (int i = 0; i < n; i++)
    {
        if (a[i] == c || fabs(a[i] - c) == fabs(i - n))
        {
            return 0;
        }
    }
    return 1;
}


void add_queen(int n)
{

    if (n >= N)
    {
        show();
    }
    else
    {
        for (int c = 0; c < N; c++)
        {
            if (is_place_ok(n, c))
            {
                a[n] = c;
                add_queen(n + 1);
            }
        }
    }

}



void main()
{

    add_queen(0);


    system("pause");
}
八皇后的递归回溯求一个解和全解 什么是八皇后问题?    八皇后问题是一个古老的问题,于1848年由一位国际象棋棋手提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。在计算机程序上用递归回溯求解:    递归回溯本质上是一种枚举法,这种方法从棋盘的第一行开始尝试摆放皇后,如果摆放成功,就换下一行,如果当前位置摆放不成功,就向后移动一格能否摆放。如此反复,直到棋牌的八行... 阅读详情

相关推荐

N皇后问题:从经典回溯到现代启发式与随机算法的实战演进

本文深入探讨N皇后问题的多种解法演进,从经典回溯算法到现代启发式与随机算法(如拉斯维加斯算法)的实战应用。通过对比不同规模下的性能表现,提供算法选择指南和优化技巧,帮助开发者高效解决这一经典组合优化问题。文章特别强调了启发式算法在大规模场景中的显著优势。

weixin_30316097的博客 474

python八皇后问题递归算法_Python八皇后问题解答过程详解

最近看Python看得都不用tab键了,哈哈。今天看了一个经典问题--八皇后问题,说实话,以前学C、C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的时候碰到的。八皇后问题是说要在一个棋盘上放置8个皇后,但是不能发生战争,皇后们都小心眼,都爱争风吃醋,如果有人和自己在一条线上(水平、垂直、对角线)就会引发撕13大战,所以我们就是要妥当的安排8位娘娘...

weixin_39642761的博客 507

C++递归与回溯法实现八皇后问题详解

八皇后问题,表面看是个小游戏,实则是算法设计的微型宇宙。它教会我们的不仅仅是“怎么放皇后”,更是:如何从直观建模走向性能驱动;如何用数学洞察简化复杂判断;如何通过状态管理保障程序正确性;如何在单线程与多线程、串行与并行之间做出权衡。当你第一次写出能输出 92 个解的程序时,也许只是兴奋于“我做到了”;但当你第二次重构它,用位运算让它飞奔起来时,你会明白:编程,是一种不断逼近最优解的艺术。而这,正是我们热爱它的原因 ❤️。

weixin_33072399的博客 1098

算法 | 八皇后问题

什么是八皇后问题? 八皇后问题是一个古老而著名的问题,它是回溯算法的典型案例。其问题的内容是:在8x8格的国际棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问共有多少种摆法。 八皇后问题算法思路分析: 1、先把第一个皇后放在第一行第一列; 2、第二个皇后放在第二行第一列,然后判断是否可行,如果可以,继续放在第二列、第三列,依次把所有列都放完,找到一个合适的; 3、继续放第三个皇后,还是从第一列、第二列…直到第八个皇后也能放在一个不冲突的位置上,这样就找到了一

qq_42190335的博客 2784

simulink调用C代码函数-C Caller模块

simulink中如何调用写好的C代码函数?使用C Caller模块调用C代码。

weixin_40531919的博客 5670

一种解决STM32多串口同时收发的方法

在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口, 串口1重定向以后,用库函数自带的printf函数打印字符串 串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串 串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用 多次研究以后,采用三个串口都使用重定向后的库函数自带的printf

Zxp0605的博客 8796

八皇后解法(一)

import numpy as np a=[4,1,2,5,4,0,6,7] def rem(*args): str=[0, 1, 2, 3, 4, 5, 6, 7] for t in args: str.remove(t) return str def isReturn(i): for t in range(i): ...

qqqgg的专栏 341

ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。其采用的相机和IMU传感器,在硬件上进行了时间同步。

琉璃轻纱的博客 1万+

八皇后单解和全解递归算法(Lua实现)

单解递归算法local file = io.open('output.txt', 'w')io.output(file) local N = 8local a = {} local times = 0 local function is_place_ok(n, c) -- n >=1 and n <= 8 for i = 1, n - 1 do if (a[i] == c)

rodbate的博客 625

保姆级避坑指南:用Livox官方工具搞定Mid-360多雷达自动标定(附源码Bug修复)

本文详细解析了使用Livox官方工具进行Mid-360多雷达自动标定的全流程,包括环境搭建、工具链配置、关键Bug修复及数据采集最佳实践。重点解决了PointCloudMapper.cpp边界检查缺失和calibration.cpp点云显示问题,提供了实用的代码修复方案和标定质量评估指标,帮助开发者高效完成激光雷达标定任务。

weixin_29053695的博客 281

Calibre PEX提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文深入解析Calibre PEX工具中hcell与xcell文件的协同工作机制,提供模块级寄生参数提取方案。通过实战案例和避坑指南,帮助工程师精准屏蔽已验证IP模块,提升仿真效率和数据一致性,适用于65nm以下工艺节点的复杂SoC设计。

weixin_29275257的博客 626

递归算法之八皇后问题

递归算法之八皇后问题

weixin_58473601的博客 5404

一文读懂 SAP ERP / SAP S/4HANA 里的 Price List:概念、配置、定价流程与可运行 ABAP 示例

SAP ERP/S4HANA中的Price List解析 本文系统阐述了SAP定价体系中Price List的核心概念和实现机制。Price List并非独立的价目表,而是通过条件技术(条件类型、访问序列、条件记录)与Price List Type(PLTYP)共同作用的定价维度。文章详细说明了: Price List本质上是客户主数据中的PLTYP字段,作为定价查找键使用 定价流程中条件访问序列如何利用PLTYP查找特定价格 S4HANA与ECC版本在价格维护入口的差异 实际业务中如何通过不同PLTYP实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 660

八皇后递归算法

八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击。共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格。 皇后每步可以沿直线、斜线 走任意格。 思路: 1.想把8个皇后放进去,肯定最终每行只有一个皇后,每列只有一个皇后。 2.设个二维数组chess [ i ] [ j ] 模拟棋盘,cas存放摆法。i j 是表示i行j列: 写一个用于递归的函数,思路如下 3.从上往下一行行的放皇后,放下一行时从最左边(第0列)放起,如果不能放就往右挪一格再试。注意判断右边有没有越界出棋盘。 4.

ZJC'博客 1472

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

八皇后问题(递归)

一、八皇后问题 八皇后问题, 是一个古老而著名的问题, 是回溯算法的典型案例。 该问题是国际西洋棋棋手马克斯· 贝瑟尔于1848 年提出: 在 8× 8 格的国际象棋上摆放八个皇后, 使其不能互相攻击, 即: 任意两个皇后都不能处于同一行、同一列或同一斜线上, 问一共有多少种摆法。 二、递归解决 1、思路分析 (1)第一个皇后先放第一行第一列; (2)第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适; (3)继续第三个皇后,还是第一列、

qq_44111805的博客 3146

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

递归——八皇后问题(回溯算法)

八皇后问题介绍 数据结构和算法内容介绍 八皇后问题算法思路分析 1. 第一个皇后先放在第一行第一列 2. 第二个皇后放在第二行第一列,然后判断是否ok,如果不ok,继续放在第二列,第三列,依次把所有列都放完,找到合适的 3. 继续第三个皇后,还是第一列,第二列。。。直到第八个皇后也能放在一个不冲突的位置,算是找到了一个正确解 4. 当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯...

fishermanMr 1353

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

八皇后问题,秒懂递归回溯(有图详解|c语言)

前言: 各位和我一样的刚学完递归的小白们,是不是突然遇见了一个大BOSS,八皇后问题!!把自信的说着“老子递归学好了!”的你一棒子打回了出生点,就像你刚玩只狼遇到的那个大胖子,刚玩原神遇到的雪山。今天,我就和大家一起学习一下这个著名的八皇后问题。

c0re的博客 2万+

【数据结构】递归解决八皇后问题

递归解决八皇后问题 (1) 第一个皇后先放第一行第一列; (2) 第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适; (3) 继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解; (4) 当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到; (5) 然后回头继续第一个皇后放第二列,后面继续循环执行 1,2,3,4的步骤。

dengmsjava的博客 1193

八皇后问题(递归回溯法)

八皇后问题(递归回溯法) 问题 在一个8*8的棋盘中,有八个皇后的棋子。这些棋子所放的位置的同一行,同一列和同一个斜线上不能出现另一个皇后,问有多少种摆放的方式。 思路 (1)先将一个皇后放到第一行的第一列 (2)然后将第二个皇后放到第二行的第一列,进行判断是否与其他皇后冲突,如果冲突,则移动到第二列…以此类推,直到不再冲突,如果全部列都冲突,则去除该行,前一行在进行移动列,寻找下一个不冲突的位置。 (3)然后根据前两个步骤继续放第三行,第四行,直到第八行,当找到第八行合适位置的时候,则找到一种正确的摆放

qq_42590394的博客 2164

递归——八皇后问题

用递归解决八皇后问题 问题描述 八皇后问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行,同一列或者同一斜线上,问由多少种摆法。 思路分析 第一个皇后先放在第一行的第一列 第二个皇后放在第二行的第一列,然后进行判断。判断什么呢?判断与前面所有的皇后是否会互相攻击。如果会互相攻击则换成第二列、第三列直到把所有的列放完,如果所有的列都放完还没有正确的解,则回溯上一个皇后的摆法。 重复第三步的动作,直到8个皇后全部摆完,就得

weixin_51506327的博客 470

【八皇后问题】递归算法学习系列之八皇后问题

http://www.cnblogs.com/jillzhang/archive/2007/10/21/922830.html http://www.cnblogs.com/drizzlecrj/archive/2007/10/04/913703.html 1.引子    中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这

jack_incredible的专栏 1485

算法总结——八皇后问题(三种解法)

问题描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数b,要求输出第b个串

3万+

八皇后问题4种c语言算法

八皇后问题 1.递归回溯法 B站懒猫老师讲的(我在这里学的) 八皇后问题的递归回溯算法思路:从第一行开始当某一行皇后位置不与前面所有皇后位置冲突那么记录该行皇后位置并调用递归函数进入下一行,摆放下一个皇后,逐个位置摆放,若该行所有位置都被其他皇后占领,那么就回溯到上一行重新摆放上一行皇后直至所有皇后都不冲突那么记录一次方法然后回溯寻找其他摆放方法。 冲突算法思路:一个8*8的棋盘每一个位置若用其行号加上其列号我们可以得到下图,由图可知在同一条上对角线的数值都相同,因此我们可以利用该规律设计判断上对角线是否冲

yunProgrammer的博客 1万+

图解八皇后问题(递归)

(以高斯为代表的许多数学家先后研究过这个问题。后来,当计算机问世,通过计算机程序的运算可以轻松解出这个问题) 题目描述 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 正确方法如图(其中一种放法) 本题采...

计算机科学与技术专业学生的成长之路 1万+
上一篇: Java中的四种引用类型 Strong, Soft, Weak And Phantom (一)
下一篇: 八皇后单解和全解递归算法(Lua实现)
rodbate
博客等级 码龄11年 17粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值