- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * 大题:给定一些字符串,问字符串是否出现过,如果没有输出“OK”,有则按其出现的次数在其后面加上1,2,3… N=100,可以想到每次暴力查找之前的字符串 如果N很大怎么办? C++ STL mapclass Key, class T “关键字/值”之间的相互对应 STL学习网站: /reference/ DFS 普通DFS 迭代加深算法 IDA* BFS 普通BFS 优先队列BFS 双向BFS A*算法 搜索的剪枝和优化 深度优先搜索算法 (Depth-First-Search) 相关数据结构:栈(后进先出) 对于给定的N个数字,如何输出全排列 暴力枚举所有情况即可,如何暴力? 用DFS递归处理 过程中用mark[]数组进行标记某个数字是否用过 初始化:memset(mark,false,sizeof(mark)) void dfs(int dep) { if(dep==n)//当搜到底层时就可以输出解 { for(int i=0 ;in ;i++) printf(%d ,res[i]); putchar(\n); return ; } for(int i=0 ;in ;i++) { if(mark[i]==false) { mark[i]=true;//标记 res[dep]=dt[i]; dfs(dep+1);//层数加1 mark[i]=false;//回溯时取消标记 } } } 复杂度O(N!) DFS是很暴力的写法,当数据量比较大时不宜用 DFS形成的是一棵树,经常需要对其进行剪枝,也就是所谓的优化 推荐剪标题目:HDU 1010 Tempter of the Bone N(N=16)很小,想到可以用DFS暴力枚举,对于每本书都有取与不取两种情况,复杂度O(2^N) 其它方法: 取—用1表示,不取—用0表示 例如有4本书,则0011表示后两本取,前两本不取 用二进制循环枚举,避免DFS压栈时间上的浪费 如果找到一个解,设为minBook,如果枚举时1的个数超过minBook,则可剪去 这里涉及一些位操作: 1n:表示n右移n位 ((num(1i))==(1i)):可判断某位是否为1 ….. 广度优先搜索算法(Breadth-First-Search) 与DFS有点相似,以根节点为中心,向外进行扩展,每次拓展一层,BFS同样会形成一棵树 相关数据结构:队列(先进先出) STL:#include queue queue Q; Q.push( startState ); While ( ! Q.empty ) { curState = Q.front();//取头节点 if( curState == endState ) return true; mark[curState] = true; extState = extend ( curState ); If( !mark[extState] ) {//如果该状态还没拓展,则状态入队 Q.push( extState ); } } BFS过程中需要注意的几点: 状态空间是什么 状态如何存储 状态如何判重 怎么搜索 大意:给出一个棋盘,及起始坐标S和终点坐标T,问按马字走法从S到T的最小步数 图上的最短路问题,可以用广宽优先搜索BFS解决 看下我们需要解决的问题.. 状态如何储存? 广搜过程一般用结构体来记录状态 struct Node { int x,y; int step; }; 如果要打印路径怎么办?可以在结构体中加入变量op表示搜索方向,pre表示前一状态在队列中的位置 状态如何判重? 对于此题,用二维数组mark[][]标记搜索过的状态即可(为什么要标记?) 状态如何转移? 一般通过方向数组来进行状态的转移 const int dx[]={-2,-2,-1,-1,1,1,2,2}; const int dy[]={-1,1,-2,2,-2,2,-1,1}; Q.push(start); while(!Q.empty()) { pre=Q.front(); if(pre.x==end.x pre.y==end.y)//找到目标即可退出 break; for(int m=0 ;m8 ;m++)//状态转移,往8个方向移动 { cur.x=pre.x+dx[m]; cur.y=pre.y+dy[m]; cur.step=pre.step+1; if(!v[cur.x][cur.y] ok(cur
您可能关注的文档
- 仇人和恩人―献给上班族的你.ppt
- perl搜索引擎原理.ppt
- 一个人的遭遇 高中必修四.ppt
- 秋天的雨教学课件袁付锰.ppt
- 理想流反应器.ppt
- 商务礼仪培训(讲义).ppt
- 习语和四字格的翻译.ppt
- MyeHR人力资源管理系统.ppt
- 柏拉圖 魚骨圖.ppt
- 2013年重庆中考历史复习(三).ppt
- 2026版创新设计高考总复习地理中图版教师用-第58课时 交通运输与区域社会经济发展.docx
- 2026版创新设计高考总复习地理中图版教师用-第71课时 南水北调对区域发展的影响.docx
- 2026版创新设计高考总复习地理中图版教师用-第81课时 环境保护与国家安全.docx
- 2026版创新设计高考总复习地理中图版教师用-第77课时 海洋空间资源与国家安全.docx
- 2026版创新设计高考总复习地理中图版教师用-第72课时 黄河流域内部协作.docx
- 教育硕士考前冲刺练习含答案详解【达标题】.docx
- 教育硕士经典例题附答案详解【考试直接用】.docx
- 教育硕士综合提升测试卷附参考答案详解(完整版).docx
- 教育硕士题库附参考答案详解【黄金题型】.docx
- 教育硕士预测复习最新附答案详解.docx
文档评论(0)