深度优先搜索搜索.pptVIP

  • 26
  • 0
  • 约1.12万字
  • 约 51页
  • 2017-10-13 发布于重庆
  • 举报
深度优先搜索搜索.ppt

搜索算法; 从问题的某一种可能出发, 搜索从这种情况出发所能达到的所有可能, 当这一条路走到“ 尽头 ”而没达到目的地的时候, 再倒回上一个出发点, 从另一个可能出发, 继续搜索. 这种不断“ 倒回 一步寻找解的方法, 称作 回溯法 . 回溯即是较简单、较常用的搜索策略,实质就是一种搜索策略.;深度优先搜索;2.深度优先搜索的基本算法结构 (1)递归实现。 Procedure dfs_try(i); For i:=1 to maxr do begin if 子结点mr符合条件 then begin 产生的子结点mr入栈; if子结点mr是目标结点 then 输出; else dfs_try(i+1); 栈顶元素出栈; End; End;;1.、[问题描述] 学校放暑假时,信息学辅导教师有n本书要分给参加培训的n个学生。如:A,B,C,D,E共5本书要分给参加培训的张、刘、王、李、孙5位学生,每人只能选1本。教师事先让每个人将自己喜爱的书填写在如下的表中,然后根据他们填写的表来分配书本,希望设计一个程序帮助教师求出可能的分配方案,使每个学生都满意。;输入格式:第一行一个数n(学生的个数,书的数量) 以下共n行,每行n个0或1(由空格隔开),第I行数据表示第i个同学对所有书的喜爱情况。0表示不喜欢该书,1表示喜欢该书。 输出格式:依次输出每个学生分到的书号。 样例: 输入:book.in 5 0 0 1 1 0 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1 输出:book.out 3 1 2 4 5;分析: a:array[1..maxn,1..maxn]of 0..1; b:array[1..maxn]of integer; {方案:b[i]是第i个人借第b[i]本书} book:array[1..maxn]of boolean; {book[[i]:能否可以借第i本书, 初始:true,一旦有人借了:就改为:false} ;算法设计: procedure try(i:integer);{搜索第i个人可以借的书b[i]} var j:integer; begin if i=n+1 then 输出结果 else for j:=1 to n do if 第i个人可以借第j 本书 then begin 记录下b[i]; 标记第j本数已被借; try(i+1); 删除书的被借标志; end; end;;procedure try(i:integer); var j:integer; begin if i=n+1 then print else for j:=1 to n do if book[j] and (a[i,j]=1) then begin b[i]:=j; book[j]:=false; try(i+1); book[j]:=true; b[i]:=0; end; end;;procedure print; var i:integer; begin for i:=1 to n-1 do write(b[i], ); writeln(B[N]); end;;2.、[问题描述] house11.txt 骑士的游历1 设有下图所示的一个棋盘,在棋盘上的A点有一个中国象棋马,并约定马走的规则: 1、马只向右走; 2、马走“日“字。 找出所有从A到B的路径。;分析: 1、马跳的方向: x:array[1..4,1..2]of integer= ((1,-2),(2,-1),(2,1),(1,2)); 4个方向横向和纵向的增量。 2、记录马经过的位置坐标 a:array[0..8,1..2]of integer; 第i步所在的位置,1:横坐标 2:纵坐标;递归算法:

文档评论(0)

1亿VIP精品文档

相关文档