码迷,mamicode.com
首页 > 其他好文 > 详细

汉诺塔问题

时间:2020-06-10 21:04:07      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:col   names   问题   esc   str   ==   目标   span   return   

汉诺塔问题
时间限制:1秒 内存限制:128M
题目描述


设有n个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱A上,另有两根立柱B和C。现在要求把全部圆盘从A柱(称为源柱)移到C柱(称为目标柱),移动过程中可借助B柱(称为中间柱)。移动时有如下的要求: 



1) 一次只许移动一个盘。 



2) 任何时候、任何柱子上不允许把大盘放在小盘上边 



3) 可使用任意一根立柱暂存圆盘。 



问:如何用最少步数实现n个盘子的移动?请打印出具体的移动方案

输入描述


一行一个正整数n,1<=n<=18

输出描述


输出若干行,第i行表示第i布的移动方案

样例
输入
3
输出
A->C
A->B
C->B
A->C
B->A
B->C
A->C

#include<iostream>
using namespace std;
void h(int s,char a,char b,char c)
{
if(s==1)
{
cout<<a<<"->"<<c<<endl;
}
else
{
h(s-1,a,c,b);
cout<<a<<"->"<<c<<endl;
h(s-1,b,a,c);
}
}
int main()
{
int n;
cin>>n;
h(n,‘A‘,‘B‘,‘C‘);
return 0;
}

汉诺塔问题

标签:col   names   问题   esc   str   ==   目标   span   return   

原文地址:https://www.cnblogs.com/tcwbob/p/13088402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!