首页 > 代码库 > 【算法:2】hanoi双塔
【算法:2】hanoi双塔
汉诺塔,经典的递归。
经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK。有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子。现在请你编写程序计算如何将这n个盘子按照规则移到C柱子上,每次只能移动一个盘子,移动过程中可以借助B柱子,任意状态,各个柱子的盘子必须小盘在放在大盘子上面。现在输入两个正整数n,表示有n个盘子,请输出他的每一次移动。
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=-1; for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘; return x*f;}int n,step;void hanoi(int now, char from, char use, char to){ if( !now) return ;//如果没盘子了,就不用移动了 step++;//加步数 printf("step %d: from %c to %c\n",step,from,to);//输出现在 hanoi(now-1,from,to,use);//先把开始移动的柱子上所有盘子移动到借助柱子上 hanoi(now-1,use,from,to);//然后再把借助柱子上的所有盘子移动到最终柱子上 return ;}int main(){ n=read(); hanoi(n,‘A‘,‘B‘,‘C‘);//从A借助B移动到C }
【算法:2】hanoi双塔
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。