📄 towers.cpp
字号:
# include <iostream.h>
# include "stdlib.h"
int i=1; // 设置变量i,以跟踪移动圆盘的步数
// 基本情况,直接将一个圆盘移动到另一个圆盘上
class Hanoi{
public:
void move_disk(char src,char dst)
{
cout<<" "<<i<<" "<<src<<" =====> "<<dst; //打印出移动的路径 从**塔盘至**塔盘
i=i++;
cout<<endl;
}
//应用递归的方法实现n>1时的移动
void towers(int n, char src, char mid, char dst)
{
if(n==1)
{
move_disk(src, dst);
return;
} //当n=1时的处理
towers(n-1,src,dst,mid); //以 dst(C塔)为辅助,将1到n-1号圆盘全部移动到mid(B塔)上
move_disk(src, dst); //直接将A塔上的圆盘移动到C盘上
towers(n-1, mid, src, dst); //将B塔上的1至n-1号盘移动至C塔上
}
}H;
void main()
{
// 欢迎界面
cout<<" **************** "<<endl<<endl<<endl;
cout<<" Welcome to Hanoi Game."<<endl<<endl<<endl;
cout<<" **************** "<<endl;
_sleep(2500);
system("cls"); // 该界面保持2.5秒之后进入主函数
int n, disks; //设定一个圆盘个数的参数
dd: cout<<endl<<" Nunber of disks(1~15):";
cin>>n; //从用户获取圆盘个数参数
disks=(int)n;
if(disks==0)
{cout<<" Bad Input!"<<endl;
goto dd;}
if(disks>0&&disks<=15){
cout<<"steps from * to *"<<endl;
H.towers(disks,'A','B','C');
cout<<endl<<" Continue...(Y/N):";
//是否循环汉诺塔问题
char n;
cin>>n;
while(n=='y'||n=='Y')
{ i=1;
cout<<endl<<" Nunber of disks(1~15):";
cin>>disks;
if(disks>0&&disks<=15){
cout<<"steps from * to *"<<endl;
H.towers(disks,'A','B','C');
}
else{
cout<<" Bad Input!"<<endl;
goto dd;
}
cout<<endl<<" Continue...(Y/N):";
cin>>n;
}
cout<<endl<<" BYE...!"<<endl;
exit(0);
}
else
cout<<" Bad Input!"<<endl;
goto dd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -