基本递归汉诺塔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本递归汉诺塔相关的知识,希望对你有一定的参考价值。
**本题来自科创网**
#include<iostream>
using namespace std;
int read()//输入函数,用于获取输入的数字(包括两位数和三位数等)
{
int x=0,f=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘)
{
if(ch==‘-‘)
f=-1;
ch=getchar();
}
while(ch>=‘0‘&&ch<=‘9‘)
{
x=x*10+ch-‘0‘;
ch=getchar();
}
return x*f;
}
int n,m,nthstep=0;//n是有多少个盘子,m是第几步,nthstep表示现在已到了第几步
void move(int n,char a,char c,char b)//移动函数将B柱充当过渡柱,将A柱上的n片移动到C柱上
{
//move函数为递归
if(n==0)
return ;//如果盘子被移完了,就结束程序
move(n-1,a,b,c);//先将A柱上前n-1个盘子移到B柱上,将C柱充当过渡柱
nthstep++;
if(nthstep==m)//到达了第m步输出结果,结束程序
{
cout<<a<<"-->"<<c;
exit(0);//break只能用于循环或分支语句
//exit是在调用处强行退出程序,运行一次程序就结束
}
move(n-1,b,c,a);//将A柱作为过渡柱,将B柱上的n-1个盘子移到C柱上
return ;//结束
}
int main( )
{
n=read();
m=read();
//cin>>n>>m;
move(n,‘A‘,‘C‘,‘B‘);//将B柱充当过渡柱,将A柱上的n片移动到C柱上
return 0;
}
原题:http://oj.kechuangedu.com/oj/home/problem.htm?problemID=768
以上是关于基本递归汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章