- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cc程序员面试宝典——第17节思维拓展
第3 篇 C/C++专业应用
第17 章 思 维 拓 展
本章主要介绍一些面试时与思维拓展相关的内容,例如一些经典常见的问题的算法的
实现、面试经验分享以及群体面试这种情况地介绍解答。通过本章可以知道除了专业知识
以外,在面试时也会遇到其他的情况,例如多个考官的群体面试如何应对等。应试者可以
根据自己的实际情况,有目的地加强这些方面能力。
17.1 经 典 试 题
经典试题主要是一些经典的算法题。例如,八皇后问题,经典矩形生成和汉诺塔大数
乘法等。通过本小节可以了解这些经典题目的一种求解方式。
面试题194 八皇后问题
【出现频率】★★★
【关键考点】
八皇后问题介绍;
回溯法介绍;
八皇后问题算法分析。
【考题分析】
八皇后问题是一个古老而著名的问题。该问题是19 世纪著名的数学家高斯1850 年提
出:在一个8 ×8 国际象棋盘上,有8 个皇后,每个皇后占一格;要求皇后之间不会出现相
互“攻击”的现象,即不能有两个皇后处在同一行、同一列或同一对角线上。问共有多少
种不同的方法?
回溯算法也叫试探法,它是一种搜索问题的解的方法。回溯算法的基本思想是在一个
包含所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索
至解空间树的任意结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,
则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,
继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结
点的所有子树都已被搜索遍才结束。
八皇后问题有很多中解法,其中使用回溯法进行求解是其中一种。而回溯发也是最直
接的一种解法,也较容易理解。
八皇后问题的回溯法算法,可以采用一维数组来进行处理。数组的下标 i 表示棋盘上
的第i 列,a[i] 的值表示皇后在第i 列所放的位置。例如,a[1]=5,表示在棋盘的第一例的
·224 ·
第17 章 思维拓展
第五行放一个皇后。程序中首先假定a[1]=1,表示第一个皇后放在棋盘的第一列的第一行
的位置上,然后试探第二列中皇后可能的位置,找到合适的位置后,再处理后续的各列,
这样通过各列的反复试探,可以最终找出皇后的全部摆放方法。
【答案】
八皇后问题可以使用回溯法进行求解,程序实现如下:
#includestdio.h
#define Queens 8 //定义结果数组的大小,也就是皇后的数目
int a[Queens +1]; //八皇后问题的皇后所在的行列位置,从1开始算起,所以加1
int main()
{
int i,k,flag,not_finish=1,count=0;
//正在处理的元素下标,表示前i-一个元素已符合要求,正在处理第i个元素
i=1;
a[1]=1; //为数组的第一个元素赋初值
printf(The possible configuration of 8 queens are:\n);
while(not_finish) //not_finish=1:处理尚未结束
{
while(not_finishi=Queens )//处理尚未结束且还没处理到第Queens 个元素
{
for(flag=1,k=1;flagki;k++)//判断是否有多个皇后在同一行
if(a[k]==a[i])
flag=0;
for(k=1;flagki;k++) //判断是否有多个皇后在同一对角线
if((a[i]==a[k]- (k-i))||(a[i]==a[k]+(k-i)))
flag=0;
if(!flag) //若存在矛盾不满足要求,需要重新设置第
您可能关注的文档
最近下载
- 浅谈略读课文教学--专题讲座.docx VIP
- 绿色金融复习测试卷.doc
- 2025届高考语文复习:议论文主体段落“五层结构法”写作指导 课件(共47张PPT)(含音频+视频).pptx VIP
- 电子版个人简历模板个人简历模板空白表格.docx VIP
- 摩登家庭台词剧本第一季第一集中英双语左右对照.pdf VIP
- 1:50万新 疆地质图[46幅图].pdf VIP
- SL101-2014 水工钢闸门和启闭机安全检测技术规程.docx VIP
- HK-328W型pH分析仪说明书V3.0.pdf VIP
- 001 三氯甲烷化学品安全技术说明书.doc VIP
- 高考英语语法词汇专项突破:09状语从句专项巩固训练+答案+解析[001].docx VIP
原创力文档


文档评论(0)