算法课设——八皇后问题

article/2025/9/15 7:52:02

八皇后问题,是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。

 

问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

回溯算法求解八皇后问题的原则是:有冲突解决冲突,没有冲突往前走,无路可走往回退,走到最后是答案。

#include <stdio.h>
int Queenes[8]={0},Counts=0;
int Check(int line,int list){//遍历该行之前的所有行int index;for (index=0; index<line; index++) {//挨个取出前面行中皇后所在位置的列坐标int data=Queenes[index];//如果在同一列,该位置不能放if (list==data) {return 0;}//如果当前位置的斜上方有皇后,在一条斜线上,也不行if ((index+data)==(line+list)) {return 0;}//如果当前位置的斜下方有皇后,在一条斜线上,也不行if ((index-data)==(line-list)) {return 0;}}//如果以上情况都不是,当前位置就可以放皇后return 1;
}
//输出语句
void print()
{printf("第%d种解法:\n",Counts);int line;for (line = 0; line < 8; line++){int list;for (list = 0; list < Queenes[line]; list++)printf("* ");printf("0 ");for (list = Queenes[line] + 1; list < 8; list++){printf("* ");}printf("\n");}printf("================\n\n");}
void eight_queen(int line){//在数组中为0-7列int list;for (list=0; list<8; list++) {//对于固定的行列,检查是否和之前的皇后位置冲突if (Check(line, list)) {//不冲突,以行为下标的数组位置记录列数Queenes[line]=list;//如果最后一样也不冲突,证明为一个正确的摆法if (line==7) {//统计摆法的Counts加1Counts++;//输出这个摆法print();//每次成功,都要将数组重归为0Queenes[line]=0;return;}//继续判断下一样皇后的摆法,递归eight_queen(line+1);//不管成功失败,该位置都要重新归0,以便重复使用。Queenes[line]=0;}}
}
int main() {//调用回溯函数,参数0表示从棋盘的第一行开始判断eight_queen(0);printf("摆放的方式有%d种",Counts);return 0;
}


http://chatgpt.dhexx.cn/article/EpQbuYeE.shtml

相关文章

八皇后问题(递归算法)

作者&#xff1a;非妃是公主 专栏&#xff1a;《笔记》《C》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录 想必八皇后问题&#xff0c;学过C的老哥都已经有所了解了&#xff1a; 题目是&#xff1a;在一个…

C语言:八皇后问题----回溯算法

【问题引入】 在88格的国际象棋上摆放8个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上&#xff0c;问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解&#xff0c;后来有人用图…

算法学习笔记之三:八皇后问题(递归、回溯)

&#xff08;一&#xff09;题记 从去年下半年开始找工作&#xff0c;大大小小也被“鄙”试、“面”试了n多回了。说实话只怪自己并未对常见的笔试题、面试题进行准备&#xff0c;导致败下阵来。一门学问要想学透学精是需要时间的&#xff0c;慢慢来吧…… 第一次听到“八皇后…

【算法模板】dfs 八皇后问题

1.前言 本文将以经典的八皇后问题来解析dfs的主要思想。 2.题目 题目出处&#xff1a;活动 - AcWing 3.思路讲解 dfs的思想暗含树的历遍&#xff0c;主要步骤为&#xff1a; 判断是否搜索完毕---历遍寻找符合条件的元素---递归进入下一层搜索---还原现场 我们可以先分析这个问题…

八皇后递归算法

八皇后问题 &#xff1a;假设 將八个皇后放到国际象棋盘上&#xff0c;使其两两之间无法相互攻击。共有几种摆法&#xff1f; 基础知识&#xff1a; 国际象棋里&#xff0c;棋盘为8X8格。 皇后每步可以沿直线、斜线 走任意格。 思路&#xff1a; 1.想把8个皇后放进去&…

算法设计(一) : 搜索算法实现八皇后问题

写在开头&#xff1a;实验结果截图8皇后太多截不完&#xff0c;用4皇后代替了&#xff0c;只需将n->8就行 目录 写在开头&#xff1a;实验结果截图8皇后太多截不完&#xff0c;用4皇后代替了&#xff0c;只需将n->8就行图解算法过程&#xff1a;算法一&#xff1a;DFS 按…

八皇后问题(递归回溯算法详解+C代码)

为了理解“递归回溯”的思想&#xff0c;我们不妨先将4位皇后打入冷宫&#xff0c;留下剩下的4位安排进4x4的格子中且不能互相打架&#xff0c;有多少种安排方法呢&#xff1f;现在我们把第一个皇后放在第一个格子&#xff0c;被涂黑的地方是不能放皇后的&#xff1a; 第二行的…

算法设计与分析——八皇后问题的实现——代码分析和讲解

文章目录 题目描述思路分析回顾回溯法的基本框架解题框架应用到本题定义问题的解空间定义约束函数模仿回溯法的框架去解决问题 实现源码分析与总结 题目描述 在88格的棋盘上放置彼此不受攻击的8个皇后。国际象棋的规则&#xff1a;皇后可以攻击与之处在同一行或同一列或同一斜…

八皇后问题算法(C语言实现)

1. 八皇后的由来和问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一…

八皇后算法解析

今天研究力扣的一道题死活写不出来对应的算法&#xff0c;没办法自己算法基础太差。于是看了下答案&#xff0c;发现使用什么回溯算法&#xff0c;菜鸟表示平时开发期间写的最复杂的程序就是写了两层for循环&#xff0c;已经很牛逼了有木有&#xff1f;这个回溯算法什么鬼&…

递归算法之八皇后问题

八皇后问题&#xff08;英文&#xff1a;Eight queens&#xff09;&#xff0c;是由国际象棋棋手马克斯贝瑟尔于1848年提出的问题&#xff0c;是回溯算法的典型案例。 问题表述为&#xff1a;在88格的国际象棋上摆放8个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个…

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

八皇后问题 1.递归回溯法 B站懒猫老师讲的&#xff08;我在这里学的&#xff09; 八皇后问题的递归回溯算法思路&#xff1a;从第一行开始当某一行皇后位置不与前面所有皇后位置冲突那么记录该行皇后位置并调用递归函数进入下一行&#xff0c;摆放下一个皇后&#xff0c;逐个…

数据结构与算法 — 八皇后问题(回溯算法)

问题描述 在88格的国际象棋上摆放8个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上&#xff0c;问有多少种摆法。 假设上图中红点为一个皇后的位置&#xff0c;那么他的同行&#xff0c;列&#xff0c;斜线上都不能再放置…

数据结构与算法-- 八皇后问题(多种实现方案)

八皇后问题解法一(排列筛选法) 本篇我们承接上一篇中的思想&#xff0c;想到了一个经典的算法题&#xff0c;八皇后问题&#xff1a;题目&#xff1a;在8*8的国际象棋上摆放8个皇后&#xff0c;使得其互相不能攻击&#xff0c;即任意两个换后不能在同一行&#xff0c;同一列&a…

C语言开方问题求助

求助&#xff1a; 使用的是Devcpp进行的编程尝试 在写程序的时候遇到了个问题&#xff0c;运行后结果显示为1#j 后来在朋友的帮助下改正了程序&#xff0c;解决了错误。之后的话&#xff0c;我按照我朋友的改正过的程序自己再重新打了一遍&#xff0c;结果运行后的结果还是显示…

C语言笔记

目录 基础... 3 基本类型数据... 5 定义变量... 6 进制... 6 ASCII&#xff08;阿斯克码&#xff09;... 7 输入输出... 8 printf&#xff08;&#xff09;将变量的内容输出到显示器上... 8 scanf &#xff08;&#xff09;[通过键盘将数据输入到变量中] 9 运算符... …

c语言 大数开方,大数加法之C语言函数法(只有正数版)

由于某些原因&#xff0c;我于今天2017-4-19将我的博文搬到博客园了&#xff0c;以后我就在这里扎根了。 之前想过在博客写文章方便日后复习&#xff0c;但一直未能实现&#xff0c;所以&#xff0c;现在这篇是我个人人生中第一篇博客&#xff0c;所以写博客完全没经验&#xf…

开平方的快速算法(C代码)

目录&#xff1a; 一、牛顿迭代法 二、采用移位、加减法、判断和循环实现开平方 三、效率远高于牛顿迭代法开平方法 1、原理 2、实现代码 四、卡马克快速开平方算法(推荐) 1、C-Free模拟验证卡马克开平方 2、移植到实际的项目 3、卡马克快速开平方的由来 1&#xff0…

windows 区域截屏以及延迟截屏

提起在Windows&#xff0c; 我们都会用到截屏功能&#xff0c;今天论述一下window 10系统自带的截图应用Snipping Tool 打开Snipping Tool 找到任务栏下的放大镜图标&#xff0c;点击 在下方输入snipping&#xff0c;会在左侧找到截图软件Snipping Tool&#xff0c;点击可进入…

小米手机解决此区域不可截屏

小米手机解决此区域不可截屏 无意中暂停视频弹出消息&#xff0c;想试试可不可以截屏竟然可以截屏&#xff0c;但是视频一播放就截屏不了了&#xff0c;录屏也是&#xff0c;直接变黑或者是直接提示弹窗&#xff0c;嘻嘻嘻嘻小米bug还是有好处滴