ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:226.50KB ,
资源ID:6546167      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6546167.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(深度优先算法.doc)为本站会员(11xg27ws)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

深度优先算法.doc

1、常用算法深度优先搜索(degree first serch)吴孝燕一、 深度优先搜索的基本思路把一个具体的问题抽象成了一个图论的模型树(如图)。状态对应着结点,状态之间的关系(或者说决策方案)对应着边。这样的一棵树就叫搜索树。(一)基本思路1 、在每个阶段的决策时,采取能深则深的原则试探所有可行的方案,一旦深入一层则保存当前操作引起的状态。2 、一旦试探失败,为了摆脱当前失败状态,采取回到上一阶段尝试下一方案的策略(回溯策略);或者在求解所有解时,求得一个解后,回溯到上一阶段尝试下一方案,以求解下一个解。3 、在各个阶段尝试方案时,采取的是穷举的思想。(二)引题【例 1】选择最短路径。有如下所

2、示的交通路线图,边上数值表示该道路的长度,编程求从 1 号地点到达 7 号地点的最短的路径长度是多少,并输出这个长度。数据结构1、邻接矩阵表示图的连接和权值。AI,j=x,或者 aI,j=maxint。Bi表示结点 i 是否已经遍历过。2、用变量 min 来保存最优解,而用 tot 变量保存求解过程中临时解(当前路径总长度)。3、状态。Tot 的值和结点的遍历标志值。程序结构1、递归结构。2、主程序中用 try(1)调用递归子程序 。3、子程序结构。procedure try(I:integer);var k:integer;begin if 到达了终点 then begin 保存较优解;返回

3、上一点继续求解(回溯);end else begin 穷举从 I 出发当前可以直接到达的点 k; if I 到 k 点有直接联边 并且 k 点没有遍历过 then then begin 把 AI,K累加入路径长度 tot;k 标记为已遍历;try(k); 现场恢复; end; end;子程序procedure try(i:integer);var k:integer;beginif i=n then begin if totk) and (ai,k5 then printelse beginfor j:=1 to 5 doif not(j in flag) and (likei,j0) the

4、nbegin flag:=flag+j;booki:=j;try(i+1);flag:=flag-j;endend;end;beginflag:=;c:=0;try(1);readln;end.例 2: 中国象棋棋盘如下图马自左下角往右上角跳.规定只许往左跳,不许往右跳(如图跳法)编程找出所有跳法。program tiaoma;constdi:array14 of integer=(1,2,2,1);dj:array14 of integer=(2,1,-1,-2);var x,y:array020 of integer;c:integer;procedure print(dep:intege

5、r);var j:integer;beginc:=c+1;write(c,:);for j:=0 to dep-1 do write(,xj,yj,)-);writeln(,xdep,ydep,);end;procedure try(dep,i,j:integer);var r,ni,nj:byte;beginif (i=8) and (j=4) then print(dep-1)else beginfor r:=1 to 4 dobeginni:=i+dir;nj:=j+djr;if (ni0)and(ni=0)and(njbest then begin best:=max;answer:=

6、now; end; exit; end; for i:=last+1 to max+1 do begin nowp+1:=i; h:=0; fillchar(can,sizeof(can),false); can0:=true; for j:=1 to n do get(p+1,h); for j:=1 to h+1 do if not canj then begin ma:=j-1;break;end; solve(p+1,i,ma); end; end; main begin readln(n,k); best:=0; solve(0,0,0); i:=0 2、NOIP2001 数的划分

7、将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 输入:n,k (6=pre then inc(r); exit; end; for j:=pre to s div 2 do work(dep+1,j,s-j); end; 也可利用回溯思想 procedure try(dep:integer); var i:integer; begin if dep=k then begin if tot=adep-1 then inc(sum); exit; end; for i:=adep-1 to tot div 2 do begin adep:=i; dec(tot,i); try(dep+1); inc(tot,i); end; end;try 深度优先搜索算法是算法设计中最为基本的算法。大多数的题可以用它来解决,但是深度优先搜索算法的运算速度慢,而竞赛试题对程序出解的时限有严格的要求,因此必须对搜索加以优化。优化一般有以下三种方法:(1)缩小搜索范围;(2)改变搜索次序;(3)剪枝。当然,解决问题有多种方法,能用效率更高的算法那更佳。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报