暑假字符串专题HBU程序设计训练营总结
?点这里
7-8 汉诺塔的非递归实现
借助堆栈以非递归(循环)方式求解汉诺塔的问题(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
没有错,我用递归写✍的而且过了。。。。(虽然这道题说了非递归实现)
汉诺塔,咱还真不会(C语言?老师讲过?,咱都还回去了)
感觉从B站学了一下?才懂了点:汉诺塔算法粗劣讲解以及编程实现
就是每一?步都可以分解为
1.前n-1个移到辅助杆子上。
2.把最后一个移到目标杆子上。
3.把辅助杆子上的移到目标杆子上。
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;
}
ps:我后来又遇到了这个题,总算是研究了一下非递归实现
1-2 汉诺塔的非递归实现 (25 分)点击传送~~~
至于非递归?嘛,咱现在还不会。咱也不敢写。给个链接⑧;
非递归的思想来实现汉诺塔问题的求解
?(小哥写的✍挺好的,就是我还没看呢)