2019-03-17 汉诺塔

时间限制: 1Sec 内存限制: 128MB 提交: 133 解决: 75

题目描述
汉诺塔是一种古老的游戏。

一共3个柱子,标号为1,2,3

1号柱子有从大到小一共n个盘子。

每次移动最上方的一个盘子,可以移动到其他的柱子。

任何一个盘子,都不能叠在比它更小的盘子的上方。

请把盘子从1号柱子,全部移动到3号柱子。

起始:

移动到这样:

现在,给出了n个盘子,请你描述一下用最短次数移动的过程。

输入
一个数,n,表示盘子的数量(n<=10)

输出
输出若干行。

每次操作,输出一行。输出“Move x from x to x”的格式。

最小盘子的编号为1,最大盘子的编号为n。

样例输入
4
样例输出
Move 1 from 1 to 2
Move 2 from 1 to 3
Move 1 from 2 to 3
Move 3 from 1 to 2
Move 1 from 3 to 1
Move 2 from 3 to 2
Move 1 from 1 to 2
Move 4 from 1 to 3
Move 1 from 2 to 3
Move 2 from 2 to 1
Move 1 from 3 to 1
Move 3 from 2 to 3
Move 1 from 1 to 2
Move 2 from 1 to 3
Move 1 from 2 to 3
提示

来源

#include<iostream>
#include<algorithm>
using namespace std;
void move(int from,int to,int num)
{
    printf("Move %d from %d to %d\n",num,from,to);
}
void dfs(int a,int b,int c,int n)//from  a to c ,use b
{
    if(n==1)
    {
        move(a,c,1);
    }
    else
    {
        dfs(a,c,b,n-1);
        move(a,c,n);
        dfs(b,a,c,n-1);
    }
}
int main(void)
{
    int n;
    cin>>n;
    dfs(1,2,3,n);
    return 0;   
} 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 星期五下午我们上的是种子粘贴,我带来了许许多多的豆子,有黄豆,豆绿,红豆,黑豆还有胶水。 老师说要有步骤:一用铅笔...
    王思臣阅读 179评论 0 0
  • 罗光富/文 捧一束鲜花 放在烈士墓前 我沉默不语 大地知道我说了什么 为每一个高贵的灵魂 漂一盏河灯 我沉默不语 ...
    重庆蓝天阅读 205评论 1 0
  • 之一珍珠领带 在一个阳光泛滥的夏季 她送你一条珍珠领带 她说在夏天 你带珍珠领带 比以前更英俊潇洒 每当你感到寂寞...
    闲不语阅读 260评论 0 1
  • 流浪在拉萨的夜晚之(一):见与不见,仓央嘉措,就在那里 文图/城北听雪 据说每一个喜欢旅行的人,都有一个西藏...
    城北听雪阅读 7,403评论 112 144
  • 姜先生,回家的第一天。 我在自习室。
    美元的姐姐美少女阅读 193评论 0 0