汉诺塔问题

3人阅读 评论(0) 收藏 举报
分类:
  • 汉诺塔问题的处理是经典的递归思想
  • 递归的两大过程是回溯和递推,首先将一个n规模的复杂问题转化成n-1规模,一步一步直到简化为一个具体的结果,再通过这个具体结果和递推关系依次向外递推,最终解决所有问题。
  • 一个老和尚想把A座的64个盘子移动到C座上,但每次只能移动一个盘子。移动过程中可以利用B座。
  • 此问题可以分解为:老和尚让另外一个和尚把上面63个盘子移动到B座,自己把第64个盘子放到C座,再让这个和尚把B座的63个盘子移动到C座。同样,第二个和尚自己移动第63个盘子,把上面的62个盘子的移动交给第三个和尚。依次类推,直到最后一个和尚得到一个明确的步骤。
  • 这个方法,就相当于把一个n规模的问题转化为两个n-1规模的问题和一个1规模的问题,同样再把n-1规模的问题简化为两个n-2规模的问题和一个1规模的问题,一直到所有的问题都是1规模的。类似于下图的过程。
    这里写图片描述
  • c语言代码如下:
#include<stdio.h>
int p = 0;
int main()
{
  int n;
  char a='a',b='b',c='c';
  int hannuo(char a,char b,char c,int n);
  printf("输入盘子的个数n:");
  scanf("%d",&n);
  hannuo(a,b,c,n);
}

int hannuo(char a,char b,char c,int n)
{
 int move(char x,char y);
 if(n==1){
      move(a,c);
     }
  else{
      hannuo(a,c,b,n-1);
      move(a,c);
      hannuo(b,a,c,n-1);
     }
}

int move(char x,char y)
{
  printf("第%d步:%c-->%c\n",++p,x,y);
}
查看评论

汉诺塔问题的解决思路及算法

关于汉诺塔问题,好多时候当时理解了过段时间可能又会忘,其实这个代码很简单,主要还是分治思想理解不够透彻。 架设3根柱子分别为A、B、C,圆盘数目为n。 1:如果A有一个圆盘,则直接移动至c。 2:如果...
  • m0_37907835
  • m0_37907835
  • 2017-12-31 21:25:27
  • 289

c++学习笔记之汉诺塔问题

怀着一颗菜鸟的心小心翼翼的写着我的第一个博客
  • chenhaokun1993
  • chenhaokun1993
  • 2014-05-20 21:55:35
  • 1969

递归和迭代算法 [汉诺塔问题]

递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大...
  • luobo140716
  • luobo140716
  • 2016-05-24 13:40:41
  • 3192

用栈模拟汉诺塔问题-LintCode

在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(...
  • zhaohengchuan
  • zhaohengchuan
  • 2017-09-20 20:16:46
  • 253

递归思想解决汉诺塔的问题

【解决思路】  以3个塔柱为例     铁柱x  铁柱y  铁柱z 总共64个盘子    我们把所有的呃思路聚集为以下两个问题:  问题1: 将X上的63个盘子借助z移动到y上  ...
  • huanghuanghonghong
  • huanghuanghonghong
  • 2016-10-14 23:12:35
  • 431

C语言练习 (典型递归问题)汉诺塔问题

 有三根棒为A、B、C。A棒上叠放着n个大小不等的盘,依次叠加为大盘在下,小盘在下。要求把这n个盘移到C棒上,在移动过程中可以借助B棒,每次只能移一个盘,并且在移动过程中必须保持3根棒上的大盘在上,小...
  • hehe5229
  • hehe5229
  • 2017-03-08 15:59:15
  • 4009

汉诺塔问题分析与python实现

问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且...
  • p744174529
  • p744174529
  • 2017-04-08 23:16:56
  • 237

第三周C++练习之汉诺塔问题

/* *Copyright(c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:test2.cpp *作 者:刘金石 *完成日期:20...
  • november_chopin
  • november_chopin
  • 2016-03-19 11:19:01
  • 1317

从递归算法思想解析汉诺塔问题

汉诺塔 - 问题起源 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到...
  • jespere_ling
  • jespere_ling
  • 2015-09-22 17:52:15
  • 2874

递归3: 汉诺塔的递归与迭代实现

递归实现与main(): /*------------------------------------------------------ 汉诺塔主要是有三个塔座X,Y,Z,要求将从小到大编号为 1...
  • yss28
  • yss28
  • 2013-10-18 11:23:38
  • 2279
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1019
    排名: 5万+