汉诺塔问题
来源:互联网 发布:深圳十六号公寓知乎 编辑:程序博客网 时间:2024/05/22 07:42
#include <stdio.h>#include <stdlib.h>/***法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:**在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜**板上插着三根宝石针。印度教的主神梵天在创造世界的时**候,在其中一根针上从下到上地穿好了由大到小的64片金**片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣**在按照下面的法则移动这些金片:一次只移动一片,不管**在哪根针上,小片必须在大片上面。僧侣们预言,当所有**的金片都从梵天穿好的那根针上移到另外一根针上时,世**界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同**归于尽*//***这其实是一个经典的递归问题**可以这样的考虑:**-先将前63个盘子移动到Y上,确保大盘在小盘下。**-再将最底下的第64个盘子移动到Z上。**-最后将Y上的63个盘子移动到Z上。**问题一:将X上的63个盘子借助Z移到Y上**-先将前62个盘子移动到Z上**-再将最底下的第63个盘子移动到Y上**-最后将Z上的62个盘子移动到Y上**问题二:将Y上的63个盘子借助X移到Z上**-先将前62个盘子移动到X上**-再将最底下的第63个盘子移动到Z上**-最后将X上的62个盘子移动到Y上*//*将n个盘子从X借助Y移动到Z*/void move(int n,char x,char y,char z){ if(n==1) { printf("%c->%c\n",x,z); } else { move(n-1,x,z,y); //将n-1个盘子从x借助z移到y上 printf("%c->%c\n",x,z); move(n-1,y,x,z); //将第n个盘子从x移到z上 }}int main(){ int n; printf("请输入汉诺塔的层数:"); scanf("%d",&n); printf("移动的步骤如下:\n"); move(n,'x','y','z'); return 0;}
0 0
- 汉诺塔问题 背包问题
- 递归问题,汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题.
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- Android个人学习笔记-使用myeclipse快速创建webservice并在Android中调用(续)
- iconv 使用
- tomcat服务器解析(三)---- Handler for Endpoint
- OC_05_NSString类,NSMutable,NSArray类
- C#对象初始化器
- 汉诺塔问题
- 深入研究utf8编码和ascii编码
- MFC的LISTCONTROL使用
- 分布式进阶(一)Windows 7下硬盘安装Ubuntu 14.04图文教程
- schedule_work 工作队列
- haproxy给mysql做负载均衡
- tomcat服务器解析(四) ---- 组成模块分解
- 八皇后问题
- 杭电ACM 2081:手机短号