算法学习01------汉诺塔Hanoi算法

    汉诺塔算法思想与把大象装进冰箱的思想相似。假设有三个柱子A,B,C。要把A柱子上的n个盘子移到C柱子上,始终要求大的盘子在下,小的盘子在上。可以先把A柱子上的n-1个盘子当做整体,先移到辅助柱子B上,接着把A上最大的盘子移到C柱子上,最后把B柱子的盘子移到C柱子上,总共三步骤。

步骤如下:

    1、将A柱子上的n-1个盘子看作是整体,将它移到B柱子上(相当于打开冰箱的门);

    2、将A柱子上最大的也就是最底端的盘子移到C柱子上(相当于把大象装进冰箱); 

    3、将B柱子上的盘子移到C柱子上(相当于关闭冰箱门)

 

步骤虽少,但如何打开冰箱门呢?

A移动到B,需要借助第三个柱子C,才能移动到B,B柱子就作为一个辅助柱子;同样B移动到C也要借助A,A此时就为辅助柱子。

通过递归的思想,可以很好地解决打开冰箱的问题,每一次递归都要走这三个步骤,打开、放大象、关冰箱。

代码实现如下:

  1. #include <iostream>
  2. int main(void){
  3.     void Hanoi(int n,char A,char B,char C);
  4.     int n;
  5.     char A='A',B='B',C='C';
  6.     std::cout<<"Please input the number of plates :";
  7.     std::cin>>n;
  8.     std::cout<<"the actions of move are :"<<std::endl;
  9.     Hanoi(n,'A','B','C');
  10.     return 0;
  11. }
  12. void Hanoi(int n,char A,char B,char C){
  13.     void move(char x,char y);
  14.     if(n==1)move(A,C);
  15.     else{
  16.         Hanoi(n-1,A,C,B);
  17.         move(A,C);
  18.         Hanoi(n-1,B,A,C);
  19.     }
  20. }
  21. void move(char x,char y){
  22.     std::cout<<x<<"--->"<<y<<std::endl;
  23. }

运行结果(运行系统:Windows、编译软件:GCC、代码语言:C++)如下:

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值