您的位置:首页 > 其它

递归----汉诺塔问题

2017-11-15 16:38 344 查看
汉诺塔问题:

古印度有一个梵塔,塔内有三个柱子A、B、C,开始时A柱上套有n个盘子(n由键盘输入),盘子大小不等,大的在下,小的在上,现要求把这n个盘子从A柱移到C柱。规定每次只能移动一个盘,且在任何时候3个柱子上的盘子都是大的在下,小的在上。移动过程中可利用B柱。采用递归算法模拟移动盘的过程,并要输出移动盘子的每一步。

#include <iostream>
using namespace std;
int i=1;
void move(int n,char from,char to)
{
cout<<"第"<<i++<<"步:将"<<n<<"号盘子从"<<from<<"移动到"<<to<<endl;
}
void hanoi(int n,char from,char denpendon,char to)
{
if (n==1)
move(1,from,to);
else
{
hanoi(n-1,from,to,denpendon);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
move(n,from,to); //将剩下的一个盘子移动到目的塔上
hanoi(n-1,denpendon,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
}
}
void main()
{
char x='A',y='B',z='C';
cout<<"请输入盘子的个数:";
int n;
cin>>n;
cout<<"盘子移动情况如下:"<<endl;
hanoi(n,x,y,z);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: