Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29133
  • 博文数量: 16
  • 博客积分: 600
  • 博客等级: 上士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-21 13:21
文章分类

全部博文(16)

文章存档

2011年(1)

2008年(15)

我的朋友
最近访客

分类: C/C++

2008-03-16 13:48:01

/*分析:(逐步复杂化)
A柱只有一个盘子的情况:A->B;
A柱有两个盘子的情况:小盘A->B,大盘A->C,小盘B->C
A柱有N个盘子的情况:将此问题看成上面的N-1个盘子和最下面的第N个盘子的情况

  N-1个盘子A->B;第N个盘子A->C;N-1盘子B->C
  此问题转化为搬N-1的问题,就这样递归下去,只有一种情况不是和上面的情况一样,就是只有一个盘子
  时,这就是递归结束的条件
算法分析:
(1)N-1个盘子A->B,要借助C
(2)第N个盘子A->C;
(3)N-1个盘子B->C;要借助A
其中第1步和第3步又都是要对这个递归进行调用的,直到也只有一个盘子的情况,
由此可定义两个函数:
Exchange(int n,char source,char temp,char target)
它实现将N个盘子从源柱source借助中间柱temp搬到target柱,
另一个函数定义为Move(char source,char target),用来输出搬运一个盘子的提示信息

实现的部分://要加强对函数的封装的理解
void Move(char source,char target)
{
cout<"<}
void Exchange(int n,char source,char temp,char target)
{
 //要知道这个里面也有移动一个盘子的时刻
 if(n==1)
 Move(source,target);return;//对比这个Exchange的形参,会明白这里没有中

//间的temp
 else
 {
 Exchange(n-1,source,target,temp);//这里要根据Exchange的形参的变量来,重新变化,看看上面的算法分析
 Move(source,target);//看看上面的算法分析
 Exchange(n-1,temp,source,target);//看看上面的算法分析
 }
 }
 void main()
 {
 int n;
 cout<<"请输入盘子的数目"< cin>>n;
 getchar();
 Exchange(n,'A','B','C');
 cout<<'\n';
 }
 

阅读(587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~