//file 漢諾塔問題.cpp
///////////////////////////////////////////////////////////////
// 漢諾塔問題:
//
// 有三根柱子編號爲1,2,3,其中1號柱上有若干個大小不等的盤子,
// 大的在下,小的在上(從上到下各盤編號分別爲1,2,3,...,n)。
// 現要求將柱1上的盤子全部移到柱3上,在移動的過程中可以藉助於2號柱,
// 但一次只能移動一個盤子,且在移動的過程中三根柱子上的盤子始終保持
// 大盤在下,小盤在上的秩序。
//
// 編寫完成此項任務的函數,並輸出其移動步驟。
///////////////////////////////////////////////////////////////
#include"iostream.h"
void hanoi(int n,int x,int y,int z)
{
if(n==1)
cout<<"將盤"<<n<<"從"<<x<<"柱移到"<<z<<"柱"<<endl;
else{
hanoi(n-1,x,z,y);
cout<<"將盤"<<n<<"從"<<x<<"柱移到"<<z<<"柱"<<endl;
hanoi(n-1,y,x,z);
}
}
void main(void)
{
int n;
cout<<"輸入盤數:";
cin>>n;
hanoi(n,1,2,3);
}
//漢偌塔問題中的棧狀態及遞歸執行層次.cpp
#include<iostream>
using namespace std;
void move(char x,int n,char z)
{
cout<<"move No."<<n<<" from "<<x<<" to "<<z<<endl;
}
void hanoi(int n, char x,char y,char z)
/* 1 */{
/* 2 */ if(n==1)
/* 3 */ move(x,1,z);
/* 4 */ else{
/* 5 */ hanoi(n-1,x,z,y);
/* 6 */ move(x,n,z);
/* 7 */ hanoi(n-1,y,x,z);
/* 8 */ }
/* 9 */ }
void main(void)
{
int num;
cout<<"input the number of the plates to move:";
cin>>num;
hanoi(num,'X','Y','Z');
/* 0 */}