1. n皇后問題
procedure try(i:byte);
var j:byte;
begin
if i=n+1 then begin print;exit;end;
for j:=1 to n do
if a[i] and b[j+i] and c[j-i] then begin
x[i]:=j;
a[j]:=false; b[j+i]:=false; c[j-i]:=false;
try(i+1);
a[j]:=true; b[i+j]:=true; c[j-i]:=true;
end;
end;
2.hanoi tower 漢諾塔
h(n)=2*h(n-1)+1
h(1)=1
初始所有銅片都在a柱上
procedure hanoi(n,a,b,c:byte);
begin
if n=0 then exit;
hanoi(n-1,a,c,b);
write(n,』moved from』,a,』to』,c);
hanoi(n-1,b,a,c);
begin
if k=0 then exit;
for i:=1 to 3 do
for j:=1 to han[i,0] do
if h[i,j]=k then begin now:=i;nowp:=j; end;
if now<>goal then begin
move(k-1,6-now-goal);
writeln(k moved from now to goal);
h[goal,h[goal,0]+1]:=h[now,nowp]; h[now,nowp]:=0;
inc(h[goal,0]); dec(h[now,0]);
move(k-1,goal);
end;
演算法學習(一)回溯法
回溯演算法實際上一個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...
五大常用演算法之一 回溯法
熟悉演算法的朋友們都知道,我們經常使用五大演算法思想,分別是 1.貪心演算法 2.動態規劃 3.分治法 4.回溯法 5.分支限界法 今天,我們先來總結一下 回溯法 簡介 回溯法的思想如下 每次都沿著一條路去尋找結果,如果發生了無解的情況,則返回到上一個分叉口,然後選擇另一個選擇。再向下走到盡頭。回溯...