借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。
输入格式:
输入为一个正整数N,即起始柱上的盘数。
输出格式:
每个操作(移动)占一行,按柱1 -> 柱2的格式输出。
输入样例:
3
输出样例:
a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c
理解一下首先我写了下递归的情况,这里讲下思路:
其实最终移盘子可以看做是:
1.将0到n-1个盘子借助c从a移到b;
2.将第n个盘子借助b从a移动到c;
3.最后把0到n-1个盘子借助a移动到c;
#include <stdio.h>
#include <stdlib.h>
void move(char A, char C)
{
printf("%c -> %c\n",A,C);
}
void hanoi(int n, char A, char B, char C);
int main()
{
int n;
scanf("%d",&n);
char A = 'a', B = 'b', C = 'c';
hanoi(n,A,B,C);
return 0;
}
void hanoi( int n, char A, char B, char C )
{
if(n == 1)
{
move(A,C);
}
else
{
hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);
}
}

最低0.47元/天 解锁文章
625

被折叠的 条评论
为什么被折叠?



