• 【算法与数据结构】汉诺塔


    数据结构里的汉诺塔,递归的典型代表,几乎讲到递归都会讲到汉诺塔,今天才把汉诺塔看明白,惭愧啊。

    不废话了,贴代码,基本思想在注释里有,话说往CNBLOG首页投了两次,两次都被小编给扯下来了,这次就不投了。

     1 // Hanoi.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 using namespace std;
     7 
     8 /************************************************************************/
     9 /* 三根柱子x, y, z, n个盘子,从小到大依次编号为1--n,所有盘子现在都在
    10    x柱子上,现在需要从x柱子移动到z柱子
    11   如果n==1则问题很简单,只需要将盘子从x柱子移动到z柱子,
    12   否则,需要将上面n-1个盘子从x柱子借助z柱子移动到y柱子,然后将盘子n从x柱子
    13   移动到z柱子,再将y柱子上的n-1个盘子从y柱子借助x柱子移动到z柱子
    14 
    15 /************************************************************************/
    16 void Move(int n, int a, int b)
    17 {
    18     cout<<"
    ----------- "<<"将盘子 "<<n<<" 从柱子 "<<a<<" 移动到柱子 "<<b<<endl;
    19 }
    20 
    21 //将n个盘子从x借助y移动到z
    22 void Hanoi(int n, int x, int y, int z)
    23 {
    24     //如果只有一个盘子,将此盘子从x直接移动到z
    25     if (1 == n)
    26     {
    27         Move(1, x, z);
    28     }
    29     else
    30     {
    31         //将上面的n-1个盘子从x借助z移动到y
    32         Hanoi(n - 1, x, z, y);
    33 
    34         //将盘子n从x直接移动到z
    35         Move(n, x, z);
    36 
    37         //将y上的n-1个盘子从y借助x移动到z
    38         Hanoi(n - 1, y, x, z);
    39     }
    40 }
    41 
    42 int _tmain(int argc, _TCHAR* argv[])
    43 {
    44     Hanoi(5, 1, 2, 3);
    45 
    46     return 0;
    47 }

     

    知道为什么Hanoi盘子个数给了4个吗? 因为给3个显得太少,给5个嘛,就显示不全啦!

  • 相关阅读:
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读提问-3
    结对-贪吃蛇-需求分析
    《团队-团队编程项目作业名称-最终程序》
    《20171130-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-4
    团队-井字棋游戏-项目总结
    《软件工程课程总结》
    团队编程项目作业5-小组评分
    课后作业-结对编程项目总结
  • 原文地址:https://www.cnblogs.com/cuish/p/3679352.html
Copyright © 2020-2023  润新知