版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/shiliang97/article/details/96485180](https://blog.csdn.net/shiliang97/article/details/96485180)
借助堆栈以非递归(循环)方式求解汉诺塔的问题(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
hanno(n,yuanshi,fuzhu,mubiao){ hanno(n-1,yuanshi,mubiao,fuzhu); hanno(1,yuanshi,fuzhu,mubiao); hanno(n-1,fuzhu,yuanshi,mubiao); } //大概思路就是这么个思路
#include<iostream>
using namespace std;
int hanno(int n,char yuanshi,char fuzhu,char mubiao){
if(n==1){
printf("%c -> %c\n",yuanshi,mubiao);
}else{
hanno(n-1,yuanshi,mubiao,fuzhu);
hanno(1,yuanshi,fuzhu,mubiao);
hanno(n-1,fuzhu,yuanshi,mubiao);
}
return 0;
}
int main(){
int n;
cin>>n;
hanno(n,'a','b','c');
return 0;
}