時間限制: 1 sec 記憶體限制: 128 mb
題目描述
設有n個大小不等的中空圓盤,按從小到大的順序從1到n編號。將這n個圓盤任意的
迭套在三根立柱上,立柱的編號分別為a、b、c,這個狀態稱為初始狀態。
現在要求找到一種步數最少的移動方案,使得從初始狀態轉變為目標狀態。
移動時有如下要求:
◆一次只能移乙個盤;
◆不允許把**移到小盤上面。
輸入檔案第一行是狀態中圓盤總數;
第二到第四行分別是初始狀態中a、b、c柱上圓盤的個數和從下到上每個圓盤的編號;
第五到第七行分別是目標狀態中a、b、c柱上圓盤的個數和從下到上每個圓盤的編號。
輸出每行一步移動方案,格式為:move i from p to q
最後一行輸出最少的步數。
樣例輸入
5樣例輸出3 3 2 1
2 5 4
01 2
3 5 4 3
1 1
move 1 from a to bmove 2 from a to c
move 1 from b to c
move 3 from a to b
move 1 from c to b
move 2 from c to a
move 1 from b to c
7
1 #include 2 #include 3 #include 4hanoiusing
namespace
std;
5const
char ch[4]=;
6struct
lsa[51];9
int ans=0;10
void dfs(int x,int
y)11
20int
main()
2132}33
for (int i=1;i<=3;i++)
3441}42
for (int i=n;i>=1;i--)
43dfs(i,a[i].end);
44 printf("
%d\n
",ans);
45return0;
46 }
漢諾塔 遞迴
個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...
遞迴漢諾塔
遞迴問題 遞迴要有三個要素 1.遞迴結束條件 2.遞迴結束時的處理 3.抽取重複的邏輯,剝離外殼 重點都在這一步 漢諾塔問題 把圓盤從下面開始按大小順序重新擺放在另一根柱子上。且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。首先,要搞這個編碼得要知道漢諾塔的解題思路 1.把a塔上...
遞迴 漢諾塔
漢諾塔問題。這裡順便可以求出一共需要搬運的次數。以下是漢諾塔問題的解法 class hanoi from 搬運的起點,to 搬運的目標地,middle 臨時中轉地 private static int hanoi int level,char from,char to,char middle int...