5-17 汉诺塔的非递归实现 (25分)
借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。
输入格式:
输入为一个正整数N,即起始柱上的盘数。
输出格式:
每个操作(移动)占一行,按柱1 -> 柱2
的格式输出。
输入样例:
3
输出样例:
a -> ca -> bc -> ba -> cb -> ab -> ca -> c ------------------------------- 汉若塔问题的递归求解代码如下
1 #include2 3 void move(char x, int n, char y) 4 { 5 printf("put %d from %c to %c\n", n, x, y); 6 } 7 8 void hanoi(int n, char x, char y, char z) 9 {10 if(n == 1)11 move(x, 1, z);12 else13 {14 hanoi(n-1, x, z, y);15 move(x, n, z);16 hanoi(n-1, y, x, z);17 }18 }19 20 int main()21 {22 int n;23 scanf("%d", &n);24 hanoi(n, 'a', 'b', 'c');25 }
非递归求解,目前还不会……