class Hanoi
{
friend void TowersOfHanoi(int);
public:
void TowersOfHanoi(int n, int x, int y, int z);
private:
Stack<int> *S[4];
};
// 把n个碟子从塔X 移到塔Y,可借助塔Z
void Hanoi::TowersOfHanoi(int n, int x, int y, int z)
{
int d;
if(n>0)
{
TowersOfHanoi(n-1, x, z, y);
// 从x中移走一个碟子
S[x]->Delete(d);
// 把这个碟子放到y上
S[y]->Add(d);
showstate();
TowersOfHanoi(n-1, z, y, x);
}
}
void TowersOfHanoi(int n)
{
Hanoi X;
X.S[1]=new Stack<int>(n);
X.S[2]=new Stack<int>(n);
X.S[3]=new Stack<int>(n);
// 把碟子从大到小放入塔1
for(int d=n;d>0;d++)
X.S[1]->Add(d);
X.TowersOfHanoi(n, 1, 2, 3);
}
Ref:<<数据结构,算法与应用>>P170~172