漢諾塔 最少移動次數 路徑 遞迴

2021-07-27 20:49:39 字數 844 閱讀 9452

漢諾塔:

三個柱子:a,b,c,a有n個環,講n個環全部移動到c上,要求:

1>  移動次數最少;

2>  大環不能放在小環上。

輸入:n(n<=10)

輸出 :

移動次數

路徑例:

輸入:3

輸出 :7

1 from a to c

2 from a to b

1 from c to b

3 from a to c

1 from b to a

2 from b to c

1 from a to c

分析:次數:

顯然,n=1時只有一步,n=2時,有三步。

當n>2時,需要將前n-1個放到b柱,再將第n個放到c柱,最後再把前n-1個放回c柱,

用h陣列記第i個需要的步數,得h[i]=h[i-1]*2+1,1是將第n個放到c柱用1步。

路徑:將前n-1個看成一塊,將前n-1個和第n個用 當n=2 時的方法將n個放到c柱,前n-1個再分為前n-1和第n個 即 前n-2和第n-1個。

程式:

#include#includeusing namespace std;

int k,n;

void mov(int n,char a,char c,char b){ //路徑

if(n==0) return ;

mov(n-1,a,b,c);

cout<>n;

cout<

漢諾塔移動次數(2064)

漢諾塔一般步驟 將 n 1 個圓盤移動到c柱 第 n 個圓盤移動到c柱 前 n 1 個圓盤再移動到c柱 由步驟可得遞推式 step n step n 1 1 step n 1 2 step n 1 1 step 1 0 即 step n 2 n 1。本題要求每步只能移到b柱或從b柱移出。故 首先將n...

漢諾塔移動

漢諾塔的移動可以用遞迴函式非常簡單地實現。請編寫move n,a,b,c 函式,它接收引數n,表示3個柱子a b c中第1個柱子a的盤子數量,然後列印出把所有盤子從a借助b移動到c的方法,例如 期待輸出 a c a b c b a c b a b c a c move 3,a b c 乙個環 ste...

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...