遞迴 新漢諾塔

2022-08-05 13:03:18 字數 1171 閱讀 9900

時間限制: 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 b

move 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 4

using

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 }

hanoi

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。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...