回 帖 发 新 帖 刷新版面

主题:怎么用回溯

急急急急急急急急急急

回复列表 (共6个回复)

沙发


213213

板凳

21313  ??
就是在过程中再套用过程,比如
快排
procedure qsort(l,r:longint;var a:arr);
var x,i,j:longint;
begin
  if l>=r then exit;
  i:=l;j:=r;x:=a[i];
  repeat
    while (a[j]>=x)and(i<j) do dec(j);
    if (a[j]<x)and(i<j) then begin a[i]:=a[j]; inc(i); end;
    while (a[i]<=x)and(i<j) do inc(i);
    if (a[i]>x)and(i<j) then begin a[j]:=a[i]; dec(j); end;
  until i=j;
  a[i]:=x;
  qsort(l,i,a);qsort(i+1,r,a);
end;

3 楼

递归

4 楼

you are bc!

5 楼

procedure suan(i:integer);
begin
a[i]:=a[i]+1;
if i=5 then print{检查是否满足条件然后输出}
       else suan(i+1);
if a[i]=5 then a[i]:=0;
end;
begin{主程序}
suan(1);
end.

6 楼

前面的少了东西,这是递归回溯
procedure suan(i:integer);
begin
repeat
a[i]:=a[i]+1;
if i=5 then print{检查是否满足条件然后输出}
       else suan(i+1);
if a[i]=5 then a[i]:=0;
until (a[i]=0);
end;
begin{主程序}
suan(1);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册