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 分支界限一般是采用广度优先搜索解空间,采用优先队列进行剪枝回溯法中解空间中节点可以多次出现,而分支界限只会出现一次,不会发生回溯,你怎么说...