首页 > 代码库 > 【算法: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双塔