一:题目
借助堆栈以非递归(循环)方式求解汉诺塔的问题(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
二:思路
我一上来就用递归做了 ,汉诺塔 很典型的用递归做法 所以我便没想其他的直接用递归做了,但该发生的还是会发生,最后一个点在超时了,然后在csdn上,看见大佬说将cout 改为 printf 就不超了 哈哈哈!!
三:上码
#include<bits/stdc++.h>
using namespace std;void move(char c1,char c2){//cout << c1 << " -> " << c2 << endl;printf("%c -> %c\n",c1,c2);
} //c1 经 c2 移动到 c3
void Hanoi(int n,char x,char y,char z){if(n == 1){move(x,z);}else{Hanoi(n-1,x,z,y);move(x,z);Hanoi(n-1,y,x,z);}}int main()
{int N;cin >> N;Hanoi(N,'a','b','c');}