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