八皇后问题 学

2012年 9 月 5 日

目录

一、选题

1.1背景知识………………………………………………………………………2

1.2设计目的与要求………………………………………………………………2

二、算法设计

2.1问题分析………………………………………………………………………3

2.2算法设计………………………………………………………………………3

三、详细设计

3.1源程序清单……………………………………………………………………4

四、调试结果及分析

4.1调试结果………………………………………………………………………6

4.2调试分析………………………………………………………………………7

五、课程设计总结

5.1总结及体会……………………………………………………………………7

六、答辩

6.1答辩记录………………………………………………………………………8

6.2教师意见………………………………………………………………………8

一、选题及背景知识

1.1 背景知识

在国际象棋中,皇后是一个威力很大的棋子,她可以“横冲直撞”(在正负或垂直方向

走任意步数),也可以“斜刺冲杀”(在正负45度方向走任意步数),所以在8*8的棋盘上要

布互相不受攻击的皇后,最多只能布八个,共92种布法,再也不能有别的布法了——这就

是著名的八皇后问题

在8*8的国际象棋棋盘上,放置八个皇后,使得这八个棋子不能互相被对方吃掉。也就

是说一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇

后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。

1.2 设计要求

要求:·判断在国际象棋中,能否在空棋盘上摆放8个皇后,并使其中任意两个皇后不

能在同一行,同一列或同一对角线上。

·编写完整的摆放八皇后问题的程序

·具体要求第一个皇后的起始位置由键盘输入

二、算法设计

2.1问题分析

设计——图形表示 下图中,Q代表皇后

假设在第k 列上找到合适的位置放置一个皇后,要求它与第1——k-1列上的皇后不同

行、列、对角线;可以从图上找到规律:不同列时成立,皇后放在第k 列上;讨论行时,

第j个皇后的位置 (a[j] ,j)要与 (i,k)位置的皇后不同行;如果同在/斜线上,

行列值之和相同;如果同在\斜线上,行列值之差相同;如果斜线不分方向则同一斜线

上两皇后的行号之差的绝对值与列号之差的绝对值相同,可表示为 (|a[j]-i| |j-k|)。

2.2 算法设计

利用计算机运行速度快的特点,采用枚举法,逐一尝试各种摆放方式,来判断最

终摆法。 其中判断是否同在对角线上用到了: 行数差的绝对值与列数差的绝对值相等,

来简化问题的判断。以a,b,c,d,e,f,g,h 的值表示皇后在第一,二,三,四,五,六,七,八

行对应的列数就很好的解决了行列的问题。

我的想法:,只是要能根据输入的位置进行程序。我使用了switch 选择结构语句,j

表示行数,k 表示列数,当j 为一时即皇后在第一行,然后再看a 与k 是否相等,当a 不等

于k 时,则continue,跳出本次循环,知道a 等于k 时。

其中函数大致分为三大模块:

1、排列出一种八皇后排列方法

2、 用swich 判断是否有一个位置与输入的相同

3、若满足,输出皇后列数,即a,b,c,d,e,f,g,h.

三、详细设计和编码

#include

#include

#include

int main()

{

int a, b, c, d, e, f, g, h; //定义每行所放皇后位置的列数

int x, y; //定义输入皇后的行数及列数

printf("input position");

scanf("%d", &x);

scanf("%d", &y);

//开始确定能摆放八个皇后的摆法

for(a 1;a< 8;++a)

88皇后问题C语言程序设计,八皇后问题--C语言程序设计.pdf相关推荐

  1. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  2. 用java实现八皇后问题_使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  3. 八皇后问题c语言循环,八皇后问题的12组解

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define N 8 /*皇后数*/ typedef int bool; rot(char d[ ],char s[ ...

  4. java中经典八皇后难题_Java实现经典八皇后的问题

    今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分.现在还是有点不是很明白.代码如下,已经实现运行. public class EightQueen { ...

  5. 八皇后问题python实现_八皇后问题的python实现

    以前写的一个八皇后问题求解,思路就是每次循环列出所有的可能解,然后过滤出不符合要求的解.详细见代码: //检查两个点是否在攻击线上 def attack(p1,p2): return p1[0]==p ...

  6. python8皇后不攻击问题_Python八皇后问题(落最后一颗子)

    最近在看Python基础,遇到了八皇后问题,看得整个人晕晕乎乎,甚至开始怀疑人生. 问题是在一个8*8的国际象棋棋盘上摆放8个皇后,问题一是找出一个解,问题二是问有多少个解.这里我把我自己的理解写出来 ...

  7. python8皇后不攻击问题_python 八皇后问题的解法(深度搜索)

    共本文介绍如何用深度搜索的方式求解8皇后(其实也可以求解N皇后)问题的解 八皇后问题描述 在国际想起的规则中,皇后能攻击八个方向上的棋子,而且不受距离限制. 皇后的攻击方向如下图所示: 八皇后问题则是 ...

  8. 你知道八皇后嘛?就是那个八皇后

    说起八皇后,其实这是一个古老而著名的问题.该问题是19世纪著名的数学家高斯1850年提出:在一个8*8国际象棋盘上,有8个皇后,每个皇后占一格:要求皇后之间不会出现相互"攻击"的现 ...

  9. mysql中dml语言_八、mysql DML语言

    数据操作语言: 插入:insert 修改:update 删除:delete 1.插入语句(方式一) 语法: Insert into 表名(列名,...)  Values(值1,...); 1) 插入的 ...

最新文章

  1. 【C语言】while后接分号“ ;”的用法
  2. html 表格文字颜色 css,CSS 表格-JavaScript中文网-JavaScript教程资源分享门户
  3. memcache/redis 缓存学习笔记
  4. mysql 5.6 二进制安装包_centos6上mysql5.6二进制包安装
  5. multisim变压器反馈式_借助Multisim 10仿真的负反馈放大电路
  6. LoadRunner录制app脚本详解
  7. 使用fiddler+itunes来做到下载APP在AppStore中的历史版本 注意事项
  8. 计算机复制功能快捷键,电脑复制快捷键是什么(全部复制粘贴的快捷键是什么)...
  9. FineReport报表设计基础
  10. 如何写好一个2Take1 Lua - 搭建Lua环境
  11. Tomasulo算法与记分牌算法的区别
  12. echarts上加横线标线_Echarts地图添加引导线效果(labelLine)
  13. 2022年全球与中国智能白板市场现状及未来发展趋势
  14. 身份证号码验证(直接调用idCardValidate(String idCard) )
  15. 如何设计安全可靠的开放接口---之Token
  16. java制作管理系统视频_java语言制作管理系统视频教程
  17. 实验五:常见WEB漏洞挖掘与利用
  18. 2009年6月12日,博客再次改进的公告!
  19. 企业如何借助三方表格控件,实现多人在线协同编辑?
  20. 酷享cms网站企业授权系统源码 带盗版检测

热门文章

  1. DFT的计算、FFT的基础代码、FFT的横纵坐标问题(matlab)
  2. 阿甘正传中的经典配乐
  3. 手游梦幻西游决战华山最强阵容搭配攻略盘点
  4. 您尝试购买的项目已停止供货
  5. 给你的树莓派部署一个车牌识别系统
  6. dns协议类漏洞学习--结合snort分析(二)
  7. 分享一个VUE Element-UI 的多级菜单动态渲染的组件
  8. virtualenv的介绍及基本使用(所有命令解释)
  9. 《极简主义》思维导图
  10. DirectFBGL