漢諾塔:
三個柱子: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 標頭檔案引用的較多...