汉诺塔(Stack)

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

阅读更多
个人分类: 数据结构与算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

汉诺塔(Stack)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭