汉诺塔问题

来源:互联网 发布:淘宝店仓库管理 编辑:程序博客网 时间:2024/06/07 12:50

   有三根针A,B,C,A针上有n个盘子,盘子大小不等,大的在下,小的在上,如下图所示:

要求把这n个盘子从A针移动到c针,在移动的过程中可以借助B针,每次只允许移动一个盘,且在移动的过程中在三根针上都保持大盘在下,小盘在上。

分析:将n个盘子从A针移动到C针可以分解为下面三个步骤。

1,将A上n-1个盘子移动到B 针上(借助C针)。

2,把A针上剩下的一个盘子移动到C针上。

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

事实上,上面的三个步骤包含下面的两种操作。

a,将多个盘子从一个针移动到另一个针上,这是一个递归的过程

b, 将一个盘子从一个针上移动到另外一个针上。

实现程序:

 

#include<iostream>using namespace std;void move(char src,char dest)//把src针上最上面的一个盘子移动到dest针上{cout<<src<<"-->"<<dest<<endl;}void hanoi(int n,char src,char medium,char dest)//把n个盘子从src针移动到dest针,以medium针作为中介{if(n==1)move(src,dest);else{hanoi(n-1,src,dest,medium);move(src,dest);hanoi(n-1,medium,src,dest);}}int main(){int m;cout<<"Enter the number of diskes:"<<endl;cin>>m;cout<<"the steps to moving "<<m<<"diskes"<<endl;hanoi(m,'A','B','C');return 0;}

 

运行:

以上例程来自:何方舟老师的《c++程序设计》


 

 

原创粉丝点击