pascal编程回溯算法
发布网友
发布时间:2022-05-30 18:07
我来回答
共1个回答
热心网友
时间:2023-10-26 04:46
program e;
var
n,t:longint;
a:array[1..8] of integer;
flag:array[1..8] of boolean;
procere search(depth:integer); {depth变量表示正在搜索第几个元素}
var
i:integer;
begin
if(depth>n) then {depth>n表明已经搜索到了第n个数,那么输出结果}
begin
for i:=1 to n do write(a[i]:4);
writeln;
inc(t);
exit; {此种结果输出后,退出该层搜索}
end;
for i:=1 to n do {枚举下一个出现的元素}
if flag[i]=false then {判断是否已经出现过}
begin
a[depth]:=i; {没有出现,则把第depth个数设为i}
flag[i]:=true; {给这个标志变量给出出现的标志}
search(depth+1); {递归搜索下一个元素}
flag[i]:=false; {回溯,此时恢复这个标志变量为没出现的标志}
end;
end;
begin
writeln('input N:');
read(n);
t:=0;
fillchar(flag,sizeof(flag),false); {赋初值,设定全部没有出现过}
search(1);
writeln('Total=',t);
end.
下面一题只要略作修改就行了,自己编吧……………^_^