合肥
合肥奥数网

合肥站
奥数网

信息学竞赛常用算法与策略:回溯

合肥奥数网整理 2013-01-17 14:56:03

  合肥奥数网讯:信息学竞赛常用算法与策略:回溯

  回溯是按照某种条件往前试探搜索,若前进中遭到失败,则回过头来另择通路继续搜索.

  3.1 回溯的设计

  1.用栈保存好前进中的某些状态.

  2.制定好约束条件

  例1由键盘上输入任意n个符号;输出它的全排列.

  program hh;

  const n=4;

  var i,k:integer;

  x:array[1..n] of integer;

  st:string[n];

  t:string[n];

  procedure input;

  var i:integer;

  begin

  write('Enter string=');readln(st);

  t:=st;

  end;

  function place(k:integer):boolean;

  var i:integer;

  begin

  place:=true;

  for i:=1 to k-1 do

  if x[i]=x[k]  then

  begin place:=false; break end ;

  end;

  procedure print;

  var i:integer;

  begin

  for i:=1 to n do write(t[x[i]]);

  writeln;

  end;

  begin

  input;

  k:=1;x[k]:=0;

  while k>0 do

  begin

  x[k]:=x[k]+1;

  while (x[k]<=n) and (not place(k)) do x[k]:=x[k]+1;

  if x[k]>n then k:=k-1

  else if k=n then print

  else begin k:=k+1;x[k]:=0 end

  end ;

  end.

首页 上一页 下一页 尾页

相关推荐

点击查看更多
重点初中
首页 导航