- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈搜索算法在信息学竞赛中的应用
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,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止
您可能关注的文档
最近下载
- 第十七章外阴色素减退性疾病.ppt VIP
- 考研真题 三峡大学水利与环境学院820数据库原理与应用历年考研真题汇编.docx VIP
- 中石化油品储运鉴定试题库——初 级 工.pdf VIP
- 探测器安装工程检验批质量验收记录表.docx VIP
- 2025上海松江区工作者招聘76人考试备考题库及答案解析.docx VIP
- 中国全面发育迟缓诊断指南2024解读PPT课件.pptx VIP
- 2020年国考公务员考试《行测》真题及答案(地市级).pdf VIP
- 试算法计算调洪演算程序.xls VIP
- 小学英语教学中分层次教学的实践探讨教学研究课题报告.docx
- 智能化弱电系统培训资料,大量系统图与实例图.pdf VIP
文档评论(0)