急!!!用栈实现汉诺塔问题
最近在看数据结构的书,看到关于栈这里,对用栈解决汉诺塔问题百思不得其解,望高手指点一二。现将书上代码贴到下面:
enum TOHop { DOMOVE, DOTOH };
class TOHobj
{
public:
TOHop op;
int num;
Pole start, goal, tmp;
// DOTOH operation
TOHobj(int n, Pole s, Pole g, Pole t)
{
op = DOTOH;
num = n;
start = s;
goal = g;
tmp = t;
}
//DOMOVE operation
TOHobj(Pole s, Pole g)
{
op = DOMOVE;
start = s;
goal = g;
}
};
void TOH(int n, Pole start, Pole goal, Pole tmp, Stack <TOHobj*>& S)
{
S.push(new TOHobj(n, start, goal, tmp));
TOHobj* t;
while (S.pop(t))
{
if (t->op == DOMOVE)
move(t->start, t->goal);
else if (t->num > 0)
{
int num = t>num;
Pole tmp = t->tmp; Pole goal = t->goal;
Poal start = t->start;
S.push(new TOHobj(num-1, tmp, goal, start));
S.push(new TOHobj(start, goal));
S.push(new TOHobj(new-1, start, tmp, goal));
}
delete t;
}
}
明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??
问题补充:《数据结构》的书上说“注意这里用了顺序栈,因为我们知道栈中恰好要存放2n+1个元素。”请问一下这里的2n+1个元素是什么意思?我想不通啊!
还有,哪位仁兄帮我解释下我贴的代码啊。不甚感激!!