Project 2:传奇汉诺塔
汉诺塔简介:汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
目标:今有ABC三个石柱子,每个石柱子上面有n个圆盘。先要将n个圆盘从A搬到B,请详细显示出搬运步骤。
样例输入
3
样例输出
A->B
A->C
B->C
A->B
C->A
C->B
A->B
完成程序源代码
#include <stdio.h>
void hanoi(int,char,char,char);
void done(char x,char y);
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}
void hanoi(int n,char one,char two,char three)
{
if(n==1)
done(one,two);
else
{
hanoi(n-1,one,three,two);
done(one,two);
hanoi(n-1,two,one,three);
}
}
void done(char x,char y)
{
printf("%c->%c\n",x,y);
}
本程序核心代码为
void hanoi(int n,char one,char two,char three)
{
if(n==1)
done(one,two);
else
{
hanoi(n-1,one,three,two);
done(one,two);
hanoi(n-1,two,one,three);
}
}
递归思维是完成该目标的核心思维
该函数的作用是:将第n个盘子通过three从one移到two
而完成第n个盘子从one到two,则需要将上面第n-1个盘子从one移到three,再将第n个盘子从one移到two,最后再将n-1个盘子通过one移到two。因此形成递归,不断缩小n-1的值,最终只剩下一个盘子时,只需将其从one移至two即可。
Project 2:传奇汉诺塔的更多相关文章
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Conquer and Divide经典例子之汉诺塔问题
递归是许多经典算法的backbone, 是一种常用的高效的编程策略.简单的几行代码就能把一团遭的问题迎刃而解.这篇博客主要通过解决汉诺塔问题来理解递归的精髓. 汉诺塔问题简介: 在印度,有这么一个古老 ...
- 几年前做家教写的C教程(之四专讲了指针与汉诺塔问题)
C语言学习宝典(4) 指针:可以有效的表示复杂的数据结构,能动态的分配动态空间,方便的使用字符串,有效的使用数组,能直接处理内存单元 不掌握指针就没有掌握C语言的精华 地址:系统为每一个变量分配一个内 ...
- python实现汉诺塔
经典递归算法汉诺塔分析: 当A柱子只有1个盘子,直接A --> C 当A柱子上有3个盘子,A上第一个盘子 --> B, A上最后一个盘子 --> C, B上所有盘子(1个) --&g ...
- fzu1036四塔问题(汉诺塔问题拓展)
#include<iostream> #include<cstdio> #include<cmath> using namespace std; ]; int ru ...
- 1019: [SHOI2008]汉诺塔
1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1495 Solved: 916[Submit][Status] ...
- 编程:递归编程解决汉诺塔问题(用java实现)
Answer: //Li Cuiyun,October 14,2016. //用递归方法编程解决汉诺塔问题 package tutorial_3_5; import java.util.*; publ ...
随机推荐
- ABP+AdminLTE+Bootstrap Table权限管理系统第六节--abp控制器扩展及json封装
一,控制器AbpController 说完了Swagger ui 我们再来说一下abp对控制器的处理和json的封装. 首先我们定义一个控制器,在新增控制器的时候,控制器会自动继承自AbpContro ...
- 安徽省2016“京胜杯”程序设计大赛_H_单身晚会
单身晚会 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 53 Accepted: 16 Description ZJ和Z ...
- NYOJ 69 数的长度(数学)
数的长度 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...
- Android绘画板(普通绘画模式和缩放平移绘画模式)
ScaleSketchPadDemo 项目地址: demo apk体验下载 demo2 apk体验下载 用法: 进入项目根目录:https://github.com/ShaunSheep/ScaleS ...
- OC版贪吃蛇
昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些, ...
- js prototype属性,类似.net扩展方法
prototype 属性使您有能力向对象添加属性和方法. 类似.net扩展方法 定义: String.prototype.toWeekName = function () { var newDate ...
- 新鲜出炉的JSON,拿走不谢!
一.JSON简介 1.JSON全称是JavaScript Object Notation即JavaScript对象标记法. JSON是一种轻量级(Light-Weight).基于文本的(Text-Ba ...
- TechSmith Camtasia Studio屏幕录像编辑工具
TechSmith Camtasia Studio屏幕录像编辑工具... --------------------------------------------------------- ----- ...
- BotVS趋势交易策略-MACD
MACD低买高卖自动跟单滑动止损策略 , 基于Python实现. 交叉后前一柱指金叉后的第一柱的值, 交叉后前一柱指金叉前的最后一个柱的值, 滑动价格指下单时加的价格,比如买单会现价加上这个价格,卖单 ...
- Markdown简单教程
前言:大家好 我是阿飞~ 今天给大家推荐一个不错的东西 MarkDown 今后的潮流就是用它来写readme文件 具体好处多多 就把它理解为可以快速设置样式的txt文档吧~ 标题 # 每一级标题通过# ...