深度优先搜索.pdfVIP

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

深度优先搜索

所谓所谓深度深度是对产生问题的状态结点而言的,是对产生问题的状态结点而言的,深度优先深度优先是一种控制结点扩

展的策略,这种策略是优先扩展深度大的结点,把状态向纵深发展。深度优先搜

索也叫做DFS法(DepthFirstSearch)。深度优先搜索的递归实现过程:

proceduredfs(i);

forj:=1tordo

if子结点mr符合条件then产生的子结点mr入栈;

if子结点mr是目标结点then输出

elsedfs(i+1);

栈顶元素出栈(即删去mr);

endif;

endfor;

[例1]骑士游历:

设有一个n*m的棋盘,在棋盘上任一点有一个中国象棋马.

马走的规则为:

1.马走日字

2.马只能向右走。

当N,M输入之后,找出一条从左下角到右上角的路径。例如:输入N=4,M=4,

输出:路径的格式:(1,1)-(2,3)-(4,4),若不存在路径,则输出

算法分析:我们以4×4的棋盘为例进行分析,用树形结构表示马走的所有过程,

求从起点到终点的路径,实际上就是从根结点开始深度优先搜索这棵树。

马从(1,1)开始,按深度优先搜索法,走一步到达(2,3),判断是否到达终

点,若没有,则继续往前走,再走一步到达(4,4),然后判断是否到达终点,

若到达则退出,搜索过程结束。为了减少搜索次数,在马走的过程中,判断下

一步所走的位置是否在棋盘上,如果不在棋盘上,则另选一条路径再走。

程序如下:

const

dx:array[1..4]ofinteger=(2,2,1,1);

dy:array[1..4]ofinteger=(1,-1,2,-2);

type

map=record

x,y:integer;

end;

var

i,n,m:integer;

a:array[0..50]ofmap;

proceduredfs(i:integer);

varj,k:integer;

begin

forj:=1to4do

if(a[i-1].x+dx[j]0)and(a[i-1].x+dx[j]=n)

and(a[i-1].y+dy[j]0)and(a[i-1].y+dy[j]=n)then{判断是否在棋盘上}

begin

a[i].x:=a[i-1].x+dx[j];

a[i].y:=a[i-1].y+dy[j];{入栈}

if(a[i].x=n)and(a[i].y=m)then

begin

write((,1,,,1,));

fork:=2toidowrite(-(,a[k].x,,,a[k].y,));

halt;{输出结果并退出程序}

文档评论(0)

156****6092 + 关注
实名认证
文档贡献者

博士研究生

1亿VIP精品文档

相关文档