参照递归代码改编 SETYPE为栈元素{int n,//金片数量 char x,y,z}柱子名称 栈功能代码和输出代码不贴出
初学者 使用纯C代码
void
Hanoi(SETYPE x)
{
STACK s;
char
c;
int
i = 0 , n =
pow
(2, x.n) - 1;
AStackCreate(&s);
do
{
if
(x.n == 1)
{
Output(x);
i ++;
if
(!AStackIsEmpty(&s))
{
AStackPop(&s, &x);
Output(x);
i ++;
x.n -= 1;
c = x.y;
x.y = x.x;
x.x = c;
}
}
else
{
while
(x.n != 1)
{
AStackPush(&s, x);
x.n -= 1;
c = x.y;
x.y = x.z;
x.z = c;
}
}
}
while
(!AStackIsEmpty(&s) || x.n != 1);
Output(x);
printf
(
"%d\n"
, i);
AStackDestroy(&s);
}