- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
范文 范例 指导 学习
word版本整理分享
实验一:盲目搜索算法
一、实验目的
掌握盲目搜索算法之一的宽度优先搜索求解算法的基本思想。对于宽度优先搜索算法基本过程,算法分析有一个清晰的思路,了解宽度优先搜索算法在实际生活中的应用。
二、实验环境
PC机一台,VC++6.0
三、实验原理
宽度优先 HYPERLINK /view/3688332.htm \t _blank 搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra HYPERLINK /view/1939816.htm \t _blank 单源最短路径算法和Prim HYPERLINK /view/288214.htm \t _blank 最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。同时,宽度优先搜索算法是 HYPERLINK /view/3148644.htm 连通图的一种 HYPERLINK /view/549585.htm 遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。?
其基本思想是:
(1) 把起始节点放到OPEN表中(如果该起始节点为一目标节点,则求得一个解答)。 (2) 如果OPEN是个空表,则没有解,失败退出;否则继续。 (3) 把第一个节点(节点n)从OPEN表移出,并把它放入CLOSED扩展节点表中。 (4) 扩展节点n。如果没有后继节点,则转向上述第(2)步。 (5) 把n的所有后继节点放到OPEN表的末端,并提供从这些后继节点回到n的指针。 (6) 如果n的任一个后继节点是个目标节点,则找到一个解答,成功退出;否则转向第(2)步。
宽度优先搜索示意图和宽度优先算法流程图如下图1和图2所示:
S
S
BA
B
A
DC
D
C
EF
E
F
G
G
H
H
I
I
J
J
图1、宽度优先搜索示意图
起始
起始
把
把S放入OPEN表
Fangru
OPEN是否为空表?
OPEN是否为空表?
否
是
失败
失败
把第一个节点
把第一个节点n,从OPEN表移出,并把它放入CLOSED表
扩展
扩展n,把它的后继节点放入OPEN
表的末端,提供回到n的指针
是否有任何后继节点为目标节点
是否有任何后继节点为目标节点?
否是
否
是
成功
成功
图2、宽度优先算法流程图
四、实验数据及步骤
这部分内容是通过一个实例来对宽度优先算法进行一个演示,分析其思想。问题描述了《迷宫问题》的出路求解办法。
定义一个二维数组:?int?maze[5][5]?=?{????0,?1,?0,?0,?0,????0,?1,?0,?1,?0,????0,?0,?0,?0,?0,????0,?1,?1,?1,?0,????0,?0,?0,?1,?0,};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。题目保证了输入是一定有解的。? 下面我们队问题进行求解:
对应于题目的输入数组:
0,?1,?0,?0,?0,????0,?1,?0,?1,?0,????0,?0,?0,?0,?0,????0,?1,?1,?1,?0,????0,?0,?0,?1,?0,
我们把节点定义为(y,x),(y,x)表示数组maze的项maze[x][y]。于是起点就是(0,0),终点是(4,4)。我们大概梳理一遍:
初始条件:起点Vs为(0,0),终点Vd为(4,4),灰色节点集合Q={},初始化所有节点为白色节点,说明:初始全部都是白色(未访问),即将搜索起点(灰色),已经被搜索过了(黑色)。开始我们的宽度搜索。执行步骤:
1.起始节点Vs变成灰色,加入队列Q,Q={(0,0)}
2.取出队列Q的头一个节点Vn,Vn={0,0},Q={}
3.把Vn={0,0}染成黑色,取出Vn所有相邻的白色节点{(1,0)}
4.不包含终点(4,4),染成灰色,加入队列Q,Q={(1,0)}
5.取出队列Q的头一个节点Vn,Vn={1,0},Q={}
6.把Vn={1,0}染成黑色,取出Vn所有相邻的白色节点{(2,0)}
7.不包含终点(4,4),染成灰色,加入队列Q,Q={(2,0)}
8.取出队列Q的头一个节点Vn,Vn={2,0},Q={}
9.把Vn={2,0}染成黑色,取出Vn所有相邻的白色节点{(2,1),?(3,0)}
10.不包含终点(4,4),染成灰
文档评论(0)