算法设计大作业.docx
- 文档编号:27294592
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:13
- 大小:108.08KB
算法设计大作业.docx
《算法设计大作业.docx》由会员分享,可在线阅读,更多相关《算法设计大作业.docx(13页珍藏版)》请在冰豆网上搜索。
算法设计大作业
德州学院信息管理学院
算法设计与分析大作业
作品名称迭代回溯——N皇后问题
专业班级2013级计算机科学与技术
授课老师李海军
小组分工情况:
姓名
分工
祝建华
代码编写
陈其敢
代码编写
沈鑫阳
代码编写
方曙
运行分析
邱少辉
文档编辑
二〇一五年十二月十日
目录
一、作品简介1
1、介绍1
2、目的1
3、算法思想与思路2
4、实现功能2
5、应用领域2
二、主要步骤3
1、编程环境3
2、界面设计3
3、算法设计4
三、运行分析8
1、运行方法8
2、运行步骤与演示9
四、作品总结11
拓扑排序——专业课程表的打印
一、作品简介
1、介绍
八皇后问题是一个以国际象棋为背景的问题:
如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?
为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。
八皇后问题最早是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出。
之后陆续有数学家对其进行研究,其中包括高斯和康托,并且将其推广为更一般的n皇后摆放问题。
八皇后问题的第一个解是在1850年由弗朗兹·诺克给出的。
诺克也是首先将问题推广到更一般的n皇后摆放问题的人之一。
1874年,S.冈德尔提出了一个通过行列式来求解的方法,这个方法后来又被J.W.L.格莱舍加以改进。
艾兹格·迪杰斯特拉在1972年用这个问题为例来说明他所谓结构性编程的能力。
八皇后问题出现在1990年代初期的著名电子游戏第七访客中。
2、目的
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出。
高斯认为有76种方案。
1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
计算机发明后,有多种计算机语言可以解决此问题。
八皇后问题可以推广为更一般的n皇后摆放问题:
这时棋盘的大小变为n×n,而皇后个数也变成n。
当且仅当n=1或n≥4时问题有解。
解决N皇后问题犹如解决一道数学难题,对学习和教学具有重要意义,我们做的小程序,直观的展示了N皇后问题。
3、算法思想与思路
(1)回溯法中迭代回溯的应用。
(2)采用的思路大致是这样:
将一个皇后向下移动一个位置;
如果没有成功移动(超出边界),失败;
如果成功移动,则判断当前位置是否可用?
如果不可用,则重做1;
继续给下一个皇后安排位置。
(3)结束条件
如果第一个皇后的所有位置都尝试完毕仍然没有可用的解决方案或者最后一个皇后已经安排完毕。
4、实现功能
(1)输入参数:
皇后的个数。
判断皇后的个数是否等于1或大于等于4;是则传递参数,否则提示“没有合适的解,请重新选择”。
(2)开始:
根据输入的皇后的个数,进行运算。
并将解的个数和当前解得图示呈现给用户。
(3)查找:
根据解的个数可以查找解得最大数范围之内的任意解,并将当前解得图示呈现给用户。
(4)上一个、下一个:
用户可以查找上一个或是下一个解得情况。
5、应用领域
专用的N皇后计算,应用在学习和教学方面。
可以查找引以自己想要的皇后个数的解得情况。
二、主要步骤
1、编程环境
(1)硬件环境
处理器:
AMDA8-4500MAPUwithRadeonHDGraphics四核主板:
三星NP355V4X-S03CN内存:
12GB
主硬盘:
240GB/固态硬盘
(2)软件环境:
Windows10Enterprise64位MicrosoftVisualStudio2015
MicrosoftVisio2013
MicrosoftWord2013
(3)编程语言:
C#
2、界面设计
界面布局设计如下图2.2-1所示。
图2.2-1
3、算法设计
(1)迭代回溯算法设计
算法流程图如下图2.3-1所示。
图2.3-1
迭代算法程序流程如上图所示,在实现算法之前首先会初始化一棋盘,然后循环摆放N个皇后,直到回溯到第一个摆放的皇后;当摆放一个皇后的时候我们采用深度搜索的方法,按列摆放;当当前摆放的皇后经过检查没有冲突后便将这个皇后的位置记录在board数组中,也就是当前棋盘。
当所有的皇后都摆放完成后,便存储这个解,然后回溯。
(2)检查冲突算法设计
检查当前摆放的皇后是否冲突,详细设计如下:
///
///
///
///
privateboolNoConflict(intindex,int[]board,intval)
{
for(inti=0;i { if(board[i]==val||//在同一列上 (index-i)==Math.Abs(board[i]-val))//在同一斜线上 returnfalse; } returntrue;//检查接触,无冲突 } 以上算法是实现循环检查当前摆放是否和已经摆放的皇后有冲突,由于是逐行摆放的,所以不存在两个皇后在同一行的可能,只检查列和斜线。 Math.Abs()方法是获取绝对值,以此判断是否在同一斜线上的。 (3)绘画方法设计 绘图的程序设计如下: privatevoidDisplay(intindex) { if(index>=_queens.GetCount()) { MessageBox.Show("没有合适的解,请重新选择! "); return; } PANEL.Refresh(); int[]board=_queens.GetChessBoard(index); using(Graphicsg=PANEL.CreateGraphics()) { //生成画笔来绘画棋盘 using(Penpen=newPen(Color.Black)) DrawBoard(g,pen); //生成画刷来绘画皇后 using(SolidBrushbrush=newSolidBrush(Color.Blue)) { DrawQueen(board,g,brush); } } _current=index; CURRENT.Text="第"+(_current+1).ToString()+"种"; } /// ///绘画一个棋盘 /// /// /// privatevoidDrawBoard(Graphicsdc,Penpen) { //循环,每次绘画两个线,交叉形成整个棋盘 for(inti=0;i<=_queens.Dimension;i++) { dc.DrawLine(pen,newPoint(0,i*_width),newPoint(_queens.Dimension*_width,i*_width)); dc.DrawLine(pen,newPoint(i*_width,0),newPoint(i*_width,_queens.Dimension*_width)); } } /// ///绘画皇后的位置 /// /// /// /// privatevoidDrawQueen(int[]queens,Graphicsdc,Brushbrush) { for(inti=0;i { dc.FillEllipse(brush,newRectangle(i*_width+(int)(_width*_margin), queens[i]*_width+(int)(_width*_margin), (int)(_width*(1-2*_margin)), (int)(_width*(1-2*_margin)))); } } 绘图的方法如上,当需要绘制一个特定的解的时候,首先是要判断传递过来的下标是否在解得数组范围内,然后利用Refresh()方法刷新画板;然后分别调用DrawBoard()方法和DrawQueen()方法画出棋盘和皇后;最后将下标传递文本框打印输出。 三、运行分析 1、运行方法 因为我们的程序是运行在.NET平台上的窗口应用程序,只要运行环境是windows操作系统即可运行.exe文件。 运行后根据提示输入参数点击“开始”即可完成运算,并将第一种解的情况输出在屏幕上。 以八皇后为例,运行如下图3.1-1所示。 图3.1-1 2、运行步骤与演示 (1)皇后个数限制 根据国际象棋的运行规则,只有在皇后的个数等于或是大于等于4的情况下才会有解得可能,所以当输入皇后的个数是不可能有解的情况下程序会智能提示,如下图3.2-1所示。 图3.2-1 (2)查找限制 假如以八皇后为例,有92种解,查找到的解得情况也就只有92个,当查找第92种以后的解得时候也会做出提示响应。 如下图3.2-2所示. 图3.2-2 (3)N皇后的情况 本程序可以计算N个皇后解得情况,没有限制,当运行的数据过大时根据计算机的性能可能等待的时间较长。 四、作品总结 (1)收获 对回溯法有一定的复习,比在课堂上学习到的关于回溯法的知识更多、更深、更牢固。 对回溯法的操作也更熟悉了一些。 熟悉了迭代回溯,掌握得更加牢固。 (2)特色 对输入数据有自己的理解,比做了一定的改变,降低了一些难度,更加容易实现。 一个著名而经典的问题,解决这样的问题更能体会到算法的精髓,更好的用于学习和教学,不予过多修饰,简单而明了的展现算法。 (3)不足 界面简单,没有设置过多的交互,如果做成游戏,就缺少了过多的解的可能。 将解得计算方式和流程隐藏了。 指导教师评语 成绩 学号 姓名 成绩 201301001031 祝建华 201301001036 陈其敢 201301001035 沈鑫阳 方曙 邱少辉 指导教师(签名) 备注
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 作业
![提示](https://static.bdocx.com/images/bang_tan.gif)