- 55
- 0
- 约7.69千字
- 约 46页
- 2018-07-02 发布于贵州
- 举报
较好的深搜ppt课件搜索与回溯
搜索与回溯;;深度优先搜索;;;; for i:=1 to n do
if not used[i] then
//若i未出现过则在
第k个位置放i
begin
ans[k]:=i;
used[i]:=true; //标记
dfs(k+1);//继续搜索
used[i]:=false;//回溯
end;
end;
begin
read(n);
dfs(1);
end.
;Procedure search(k:integer);
begin
if 到目的地 then 输出解 ; exit;
for I:=1 to 算符种数 do
begin
保存结果
search(k+1);
恢复到保存结果之前的状态
end;
end;
;例:设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人只能从事一项,他们的效益如表所示:
;const data:array[1..5,1..5] of integer
=((13,11,10,4,7),(13,10,10,8,5),(5,9,7,7,4),
(15,12,10,11,5),(10,11,8,8,4));
var i,max:integer;
g, f:array[1..5] of integer;
p:array[1..5] of integer;
;procedure go(step,t:integer);
var i:integer;
begin
if step5 then
begin
if tmax then
begin max:=t; g:=f; end;
exit;
end;
for i:=1 to 5 do
if p[i]=0 then
begin
f[step]:=i; p[i]:=1; t:=t+data[step,i];
go(step+1,t);
t:=t-data[step,i]; p[i]:=0;
end;
end;;begin
max:=0;
for i:=1 to 5 do p[i]:=0;
go(1,0);
writeln;
for i:=1 to 5 do write(chr(64+i),:j,g[i], :3);
writeln;
writeln(supply:,max);
end.
;学校放寒假时,信息学竞赛辅导教师有A,B,C,D,E五本书,要分给参加培训的张、王,刘、孙、李五位学生,每人只能一本书。教师事先让每个人将自己喜爱的书填写在如下的表中。然后根据他们填写的表来分配书本,希望设计一个程序帮助教师求出所有可能的分书方案,使每个学生都满意。;const like:array[1..5,1..5] of integer
=((0,0,1,1,0),(1,1,0,0,1),(0,1,1,0,0),(0,0,0,1,0),(0,1,0,0,1));
name:array[1..5] of string=(zhang,wang,liu,sun,li);
var p,f:array[1..5] of integer; t:integer;
procedure print;
var i:integer;
begin
for i:=1 to 5 do write(name[i],:,chr(64+f[i]), );
writeln;
end;
;procedure try(step:integer);
var i:integer;
begin
for i:=1 to 5 do
if (p[i]=0) and (like[step,i]0) then
begin
f[step]:=i;
原创力文档

文档评论(0)