- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2讲 搜索算法-N皇后问题的自动求解 知识点 N皇后问题描述 1 N皇后问题的程序界面 1.1 需求分析 1.2 绘制N皇后的棋盘 阶段程序-NQueen1:绘制N皇后的棋盘 1.3 手动求解并判断解是否正确 阶段程序-NQueen2:手动求解并判断解是否正确 2 N皇后问题的自动求解 2.1 需求分析 2.2 自定义类实现绘制N皇后棋盘 阶段程序-NQueen3:自定义类实现绘制N皇后棋盘 2.3 搜索求解N皇后问题 阶段程序-NQueen4:搜索求解N皇后问题 3 参考程序 3.1 自动求解(引入线程同步) 3.2 控制台程序 4 期末作品参考 N皇后问题描述 问题描述: 要在N×N大小的棋盘上放置N个皇后,使得任意两个皇后不在同一行、同一列,以及对角线上。 换句话说,每一行、每一列都有且仅有一个皇后。但要注意,每条对角线上可能有一个皇后,但也可能没有,因为主对角线的数目为(2N-1)条,次对角线的数目也为(2N-1)条。 8皇后问题 N=8时,N皇后问题就成了经典的8皇后问题。 8皇后问题:要在8×8大小的棋盘上放置8个皇后,使得任意两个皇后不在同一行、同一列,以及对角线上。 8皇后问题的演示 数据结构与算法演示软件 数据结构算法|栈和队列|递归过程|皇后问题(注意观察回退过程) 8皇后问题的一个解 思考1:N皇后问题解的个数 N=1时,N皇后问题有1个解; N=2, 3时,N皇后问题无解; N=4有2个解,如下图所示。但把第2个解的棋盘转置(行变成列,列变成行)后,跟第1个解完全一样。 N皇后问题有多少个解?以8皇后问题为例。 当仅满足任意两个皇后不在同一行、同一列时,有8! = 40320种(why?)放置方法,再加上任意两个皇后不在对角线上,则满足条件的解有92个? 如果排除棋盘转置后一样的解,则8皇后问题有多少个解? N皇后问题的解之间有什么关联?这些解有什么特点? N皇后问题的解的个数跟N有关系吗? 思考2:如何理解对角线 N皇后中的对角线,以8皇后问题为例。主对角线一共有15条。我们将这种对角线称为第1种情形的对角线。 线性代数里行列式中的对角线,称为第2种情形的对角线。 8皇后问题中,第2种情形的主对角线有8条。 如果要求8皇后中的对角线为第2种情形,则8皇后问题有多少个解? 下图还是不是一个正确的解? 1 N皇后问题的程序界面 1.1 需求分析 N皇后问题的程序界面: 基于对话框的MFC应用程序; 能设置问题的规模N; 在对话框上绘制N×N的棋盘; 能手动求解:即对每个位置,第1次单击设置一个皇后,再次单击则取消; 能判定解是否正确,即用户设定的解是否满足N皇后问题的要求。 1.2 绘制N皇后的棋盘 本阶段要实现以下功能: 绘制规模为N的棋盘; 规模N可以改变; 一旦改变N,则重绘棋盘。 基础知识 在基于MFC的应用程序中实现绘图; 对比:基于API的应用程序绘图的实现; 为控件关联变量 控件型(control)变量:可以通过该变量引用控件。 也可以通过获取控件ID来引用控件。 数值型(value)变量:控件的值(如在编辑框中输入的值)存储该变量中,该变量值的变化也可以反映到控件中。 阶段程序-NQueen1:绘制N皇后的棋盘 实现步骤: 创建名为“NQueen”、基于对话框的MFC应用程序。 控件布局。各控件的ID分别为: 关于:IDC_ABOUT 退出:IDCANCEL 更改规模N:IDC_CHANGEN 编辑框:IDC_BOARD_SIZE 为编辑框控件关联变量m_N,并在构造函数中将该变量初始化为8。 为CNQueenDlg类添加如下图所示的成员变量。 在成员函数OnInitDialog()中初始化w、h、cell成员变量。 定义全局函数DrawBoard(),用于绘制指定规模、指定每格大小的棋盘。 修改成员函数OnPaint(),实现棋盘的绘制。 响应命令按钮“更改规模N”的单击事件,实现当N改变时重绘棋盘。 阶段程序1: 1.3 手动求解并判断解是否正确 本阶段要在上一阶段的基础上,实现以下功能: 通过鼠标单击的方式设置或取消某个位置上的皇后; 能判断用户设定的解是否正确。 基础知识: 指针数组: 指针:动态申请一维数组空间。 指针数组:动态申请二维数组空间。 阶段程序-NQueen2:手动求解并判断解是否正确 实现步骤: 在CNQueenDlg类中定义queen成员变量,用于存储用户设置的、各位置上是否有皇后。 在成员函数OnInitDialog()中初始化queen,通过new运算符申请21个长度为21的一维数组存储空间。 修改OnPaint函数,在适当位置添加以下代码,以实现在设置了皇后的位置上绘制亮黄色的圆圈。 修改命令按钮“更改规模N”的单击事件代码,使得N值改变后,将queen指
您可能关注的文档
最近下载
- 2026年山西老区职业技术学院单招职业技能考试必刷测试卷附答案.docx VIP
- 八年级英语人教版上册选词填空专项练习.docx VIP
- 2023年3月英语四级听力真题及原文.pdf VIP
- 2025至2030中国富硒农产品行业供需分析及投资风险报告.docx
- 2024年山西老区职业技术学院单招职业技能考试试题及答案.docx VIP
- 2023-2024学年 河北省 邢台市 信都区 校联考 七年级(上)期中 语文试卷(原卷版).docx VIP
- 入党志愿书表格(电子版空白表格).doc VIP
- 2025年山西水利职业技术学院单招职业技能测试题库审定版.docx VIP
- 新版七上英语说课课件人教版.pptx VIP
- 《稀土金属》课件.ppt VIP
原创力文档


文档评论(0)