汉诺塔-数据结构

问题简述:

  条件:A,B,C 三个塔,A上有若干圆盘;

  要求:将A上的所有圆盘移动到C上;

  运用:函数递归

设计思想:

函数:void process(int n,char A,char B,char C);

  功能:将n个盘子从A 借助 B 移动到C;

  1、process(n-1,A,C,B);  \\将n-1个盘从A借助C移动到B。A总剩下一个最大的盘(最下面的);

  2、将最下面的盘从A移动到C;

  3、process(n-1,B,A,C);  \\将B上的n-1个盘借助A移动到C上;

时间: 2024-08-14 03:37:41

汉诺塔-数据结构的相关文章

16、蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题

16.蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题 本篇名言:"人生的价值,并不是用时间,而是用深度去衡量的." 继续栈与递归应用,汉诺塔问题. 欢迎转载,转载请标明出处: 1.  汉诺塔问题 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一

数据结构与算法—递归(阶乘、斐波那契、汉诺塔)

目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单:递归通常可以简单的处理子问题,但是不一定是最好的.对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作,只关心初始条件和上下层的变化关系. 递归函数需要有临界停止点,即递归不能无限制的执行下去.通常这个点为必须经过的一个数. 递归通常能被其他方案替代(栈.数组正向求). 认识递归,递归函数通常简易但是对于初学者可能很难取理解它.拿一个递归

【数据结构】2、汉诺塔

/* *功能:假设有3个塔座x y z,在x上插有n个直径大小各不相同.从小到大编号为1 - n的圆盘,要求将x轴上的n个圆盘移动到z轴并按同样顺序排列,移动圆盘须遵循以下规则: 1).每次只能移动一个圆盘: 2).圆盘可插在x y z中的任一塔座上: 3).任何时刻不能将一个较大的圆盘压在较小的圆盘上: *文件:hanoi.cpp *时间:2015年7月6日20:22:29 *作者:cutter_point */ #include <iostream> using namespace std

数据结构---汉诺塔

/*汉诺塔:A座有n个盘子,下面直径比上面大,要借助C座,将n个盘子移到B上,移动过程中大盘子一定在小盘子下面*/ package pack; public class Main { static int n = 10; public static void main(String[] args) { han(n,'A','B','C'); //将n个盘子借助C,从A到B } public static void han(int n,char a,char b,char c) { if(n==1

数据结构0103汉诺塔&amp;八皇后

主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) { printf("%c-->%c\n",x,z); } else { move(n-1,x,z,y); //将n-1个盘子从x借助z移到y上 printf("%c-->%c\n",x,z); //将第n个盘子从x移到z上 move(n-1,y,x,z);

【数据结构与算法】汉诺塔算法——java递归实现

汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1)    直接将A柱子上的圆盘从A移动到C else    先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上    直接将A柱子上的第n个圆盘移动到C柱子上    最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子上 该递归算法的时间复杂度为O(2的n次方),当有n个圆盘时,需要移动圆盘2的n次方-1次 public class

【数据结构】递归算法—汉诺塔

汉诺塔的问题,也是一个经典的递归算法问题. 下面是自己总结的一张整体流程图. 下面是代码,代码虽简单,但理解其内部运行原理很重要. //====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename: HanNuoTa.c // description: a demo to

数据结构(java语言描述)递归实现——汉诺塔问题

1.汉诺塔问题描述 N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上.规则: 每次至移动一个盘子: 盘子可以插在x,y,z任意一个塔座上: 任何时候都不能将大盘压在小盘上. 2.解题思路 当n=1时,直接把盘子由x——>z; 当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现x——>z,然后把问题转换为实现(n-1)个盘子由y——

数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现

函数调用 通常,当一个函数运行期间调用另一个函数时,在运行被调函数之前,系统需要完成3件事: (1)将所有的实参,返回地址(个人理解是调用被调函数时的下一个语句的地址)等信息传递给被调函数保存. (2)为被调函数的局部变量分配存储空间. (3)将控制转移到被调函数入口. 从被调函数返回调用函数之前,系统完成3件事: (1)保存被调函数的计算结果. (2)释放被调函数的数据区. (3)依照被调函数保存的返回地址,将控制转移到调用函数. 递归: 一个函数自己直接或间接调用自己. 思想就是:将问题规模