首先考慮問題
要將盤子從A移動到C可以分成三步
1.將N-1號盤子移動到中轉(zhuǎn)柱B上
2.將N號盤子移送到C上
3.將N-1號盤子從B放到C
完成步驟2后需要進(jìn)行下面操作,現(xiàn)在N-1號盤子相當(dāng)于N其监,中轉(zhuǎn)柱變成了A
1.N-1(相當(dāng)于N-2)號盤子從B移動到中轉(zhuǎn)柱A
2.N號盤子移動到C
3.將N-1號盤子移動到C
.
.
.
之后的操作也是重復(fù)這兩個(gè)過程
在以上過程中邊的都是中轉(zhuǎn)站啥容,所以編寫了以下代碼
void hnmove(int n,char f,char t){
static int i=0;
printf("第%d步:移動%d號盤子哼勇,%c——>%c\n",++i,n,f,t);
}
//n是當(dāng)前盤子契沫,a是需要移動的柱子捧毛,b是中轉(zhuǎn)站欺旧,c是接收的柱子
void hannuo(int n,char a,char b,char c){
if (n==1) {
hnmove(n, a, c);
}else{
hannuo(n-1, a, c, b);//移動N-1
hnmove(n, a, c);//移動N
hannuo(n-1, b, a, c);//移動N-2
}
}
主函數(shù)調(diào)用
int main(int argc, const char * argv[]) {
void hannuo(int n,char a,char b,char c);
int n=1;
char a='A',b='B',c='C';
printf("請輸入漢諾塔層數(shù)");
cin>>n;
hannuo(n, a, b, c);
}
這個(gè)問題主要就是掌握要吧N移到目標(biāo)柱姑丑,就要吧N-1先移到中轉(zhuǎn)柱
以上