pascal回溯法,pascal 回溯法 35

2020-12-13 07:00:04 字数 697 阅读 8462

1楼:爵爷

1. 建议不要用const,

在主程序上readln(n);

2. a[1]:=i;

这里是错的,应该是a[i]:=i;你写成了a[1]3. for i:=1 to n do

begin

a[1]:=i;

find(2)

end这里find(2),不要放在循环里面,正确的是for i:=1 to n do

begin

a[1]:=i;

endfind(1);

4.建一个数组判断i是否重复

b:array[1..100]of boolean;

刚开始所有的i都是false fillchar(b,sizeof(b),false);

5. for i:=1 to n do

for j:=1 to k-1 do

begin

if i<>a[j] then begina[k]:=i;

find(k+1)

endend

然后这里就改成

for i:=1 to n do

begin

if b[i]=false then beginb[i]:=true

a[k]:=i;

find(k+1);

b[i]:=false;

end还有不明白的再问。end

在时间复杂度上比较分支限界法和回溯法

1楼 匿名用户 楼上的不要瞎说,分支界限和回溯都是两种不同的搜索方法,属于并列的,不是谁包含谁, 1 回溯法一般是采用深度优先搜索解空间,采用限界函数进行剪枝2 分支界限一般是采用广度优先搜索解空间,采用优先队列进行剪枝回溯法中解空间中节点可以多次出现,而分支界限只会出现一次,不会发生回溯,你怎么说...