码迷,mamicode.com
首页 > 编程语言 > 详细

【算法:2】hanoi双塔

时间:2016-11-13 01:48:40      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:etc   printf   nbsp   cstring   step   dig   开始   name   color   

汉诺塔,经典的递归。

     经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就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双塔

标签:etc   printf   nbsp   cstring   step   dig   开始   name   color   

原文地址:http://www.cnblogs.com/ysmor/p/6057803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!