遞迴 新漢諾塔

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

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

新漢諾塔(初步接觸退火)

此題的最後一個資料點不適用於貪心演算法,所以每次將大的優先移到目標位置有很小的概率不是最優解,但是畢竟是最優解的概率還是很大的。所以用模 yi 擬 tong 退 luan 火 gao 就可以了,反正也是隨機碰碰運氣的。概率嘛 ,只要你的srand能過,那就能過啦。 退火演算法,洛谷hack掉了貪心,無語...

洛谷P1242 新漢諾塔

首先要將第n個盤子從x到y,那麼就要把比n小的盤子全部移到6 x y,然後將n移到y 仔細想想 6代表的是3根初始柱,3根目標柱。 6 x...