c c++程序员面试宝典——第17节 思维拓展.pdfVIP

c c++程序员面试宝典——第17节 思维拓展.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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) //若存在矛盾不满足要求,需要重新设置第

文档评论(0)

karin + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档