Chinaunix首页 | 论坛 | 博客
  • 博客访问: 392429
  • 博文数量: 199
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1530
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 08:43
文章分类

全部博文(199)

文章存档

2015年(101)

2014年(97)

2011年(1)

分类: C/C++

2014-10-18 16:46:59

汉诺塔,又称河内塔,是根据一个形成的一个问题:

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

  1. 每次只能移动一个圆盘;
  2. 盘不能叠在盘上面。

提示:可将临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。

问:如何移?最少要移动多少次?

【算法步骤】

(1)将A上n-1个盘借助C先移动到B上;

(2)再把A上剩下的一个盘移动到C上;

(3)将n-1个盘从B借助A移动到C上;

阅读(834) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

wq41132014-10-21 22:59:58

void hanoi(int n,char one,char two,char three)  
{  
    if(n==1) move(one,three);  
    else  
    {  
        hanoi(n-1,one,three,two);  
        move(one,three);  
        hanoi(n-1,two,one,three);  
    }  
}

wq41132014-10-21 22:59:48

void move(char x,char y)  
{  
    printf("%c->%c\n",x,y);  
}

wq41132014-10-21 22:59:39

void hanio()  
{  
    void hanoi(int n,char one,char two,char three);  
    int m;  
    printf("Please input the number of diskes:");  
    scanf("%d",&m);  
    printf("The step to move %d diskes:\n",m);  
    hanoi(m,'A','B','C');  
&nbs