- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈搜索算法在信息学竞赛中的应用
Search Algorithm in Informatics
【前言】
在信息学竞赛日渐普及,信息技术越来越重要的今天,搜索算法,一种充分利用计
算机计算速度遍历所有可能解的算法,被认为非常基础也非常重要。让我们走近这听起
来非常高端的算法,一窥其真面目。
【摘要】
本文对搜索算法的两个分支——深度优先搜索(dfs)和广度优先搜索(bfs)展开
了研究,并通过在例题中的各种应用分析两种搜索方法的优化,对这一类的算法进行了
通用总结。
【关键词】
搜索算法 信息学 深度优先搜索 广度优先搜索 DFS BFS剪枝
【研究过程】
主要算法
深度优先搜索(dfs)
深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。( 主要用于图的搜索,但是在许多别的领域也有广泛应用。
举例说明之:下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯一的,第二个点既可以是B也可以是C,D),则我们可能得到如下的一个访问过程:A-B-E(没有路了!回溯到A)-C-F-H-G-D(没有路,最终回溯到A,A也没有未访问的相邻节点,本次搜索结束).
让我们先看一道经典例题。
【深度搜索基础】迷宫路径(深搜)
Description 这是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫。迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口。 迷宫以一个01矩阵表示,0表示通路,1表示不通,入口在座标(1,1),出口在(m,n),m表示行,n表示列。老鼠在某一格子时,可以向周围8个格子移动(只要目的格子不为1或没有超出边界)。现求解出到达出口的最少移动步数,注:站在(m,n)即表示已经抵达出口,起始时老鼠站在(1,1)处。
#includeiostream
#includestring.h
using namespace std;
int g[52][52],n,m,xmin=10000;
struct {
int x;
int y;
}xx[8];
void x(int nn,int mm,int c);
main()
{
int s,ss;
xx[0].x=0;xx[0].y=1;xx[1].x=1;xx[1].y=1;
xx[2].x=1;xx[2].y=0;xx[3].x=1;xx[3].y=-1;
xx[4].x=0;xx[4].y=-1;xx[5].x=-1;xx[5].y=-1;
xx[6].x=-1;xx[6].y=0;xx[7].x=-1;xx[7].y=1;
cinnm;
for(s=0;s=n+1;s++){g[s][0]=1;g[s][m+1]=1;}
for(s=0;s=m+1;s++){g[0][s]=1;g[n+1][s]=1;}
for(s=1;s=n;s++)
for(ss=1;ss=m;ss++)
cing[s][ss];
x(1,1,0);
if(xmin==10000)coutno;
else coutxmin;
}
void x(int nn,int mm,int c)
{
int s;
if((nn==nmm==m)(cxmin)){
xmin=c;
}
else if(cxmin)
for(s=0;s=7;s++){
if(g[nn+xx[s].x][mm+xx[s].y]==0){
g[nn+xx[s].x][mm+xx[s].y]=2;
x(nn+xx[s].x,mm+xx[s].y,c+1);
g[nn+xx[s].x][mm+xx[s].y]=0;
}
}
}
这段代码中应用了标志数组的小技巧,使程序更加简洁明了。同时,我们可以发现这种算法在最不利情况下的时间效率其实非常低,所以在这里加了非常有效的可行性剪枝,使效率大大提高。关于一些剪枝方法,我会在后文谈到。
广度优先搜索(bfs)
宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。【宽度搜索基础】奇怪的电梯(宽
您可能关注的文档
最近下载
- 2011届高考化学一轮复习专题模拟检测:专题5_氮族元素及其化合物.doc VIP
- Unit6大单元教学整体单元分析课件人教版九年级英语全册.ppt
- 教育信息化背景下跨学科教学资源的数字化建设.docx
- 城镇直埋供热管道电预热安装施工工法(技术方案).pdf VIP
- 2014造口治疗师培训个案发展计划及产品册造口学校.pdf VIP
- 标准化乡镇卫生院制度.doc
- 2026年湖南科技职业学院单招职业技能考试必刷测试卷完美版.docx VIP
- 2024年9月8日贵州省黔西南州州直遴选(事业单位考聘)笔试真题及答案解析.doc VIP
- 2025年兵棋章节答案.docx VIP
- 酒店工程部计件量化方案(3篇).docx VIP
文档评论(0)