算法导论之递归汉诺塔
2014-02-25 21:23
190 查看
我们分析可以知道,把n个盘子从a柱子移动到c柱子(当然是按照顺序的要求的)的步骤:
(1)把a柱子上的n-1个盘子借助c移动到b
(2)把a柱子上的第n个盘子移动到c
(3)把b上的n-1个盘子借助a移动到c
总的方法用
(1) sethanoi(n - 1, a, c, b)
(2)move(n, a, c);
(1)把a柱子上的n-1个盘子借助c移动到b
(2)把a柱子上的第n个盘子移动到c
(3)把b上的n-1个盘子借助a移动到c
总的方法用
sethanoi(int n,char a,char b,char c)
(1) sethanoi(n - 1, a, c, b)
(2)move(n, a, c);
(3)sethanoi(n - 1, b, a, c);
public class Hanoi { int i=0; void sethanoi(int n,char a,char b,char c)//n个盘子。a,b,c三个柱子 { if (n == 1) {move(n, a, c); i++; } else { sethanoi(n - 1, a, c, b);//这里的a,b,c不是绝对的a,b,c是指第一个,第二个,第三个元素,不要弄错 move(n, a, c); sethanoi(n - 1, b, a, c); i++; } } public static void move(int n,char x,char y) { System.out.println("Disk " +n+ " from " + x + " move to " + y); } public static void main(String[] args){ Hanoi hanoi=new Hanoi(); hanoi.sethanoi(3, 'a', 'b','c'); System.out.println("你总共需要执行"+hanoi.i+"步"); } }
相关文章推荐
- JDBC/XML的一些基本使用
- css中margin属性的探究
- 游戏资源打包
- B+ Tree & Unicode & UTF-8 & 判断是否为UTF-8 & 几种常见中文的编解码表
- 辞职穷半年,转行穷三年!!
- fusioncharts 破解方法(转载)
- quick-cocos2d-x 如何设置游戏的屏幕方向
- lucene入门01
- C语言中float,double类型,在内存中的结构(存储方式).
- Zpack (开源)
- ASP.NET MVC 过滤器
- 简单工厂模式
- fatal error C1083: Cannot open include file: 'qwtplot.h':
- http status汇总
- 面试题:宏定义
- C语言100个经典的算法
- 今天发现的一些优秀的资源网站
- 【编程之美】CPU
- 网络IPC:套接字之非阻塞和异步I/O
- socket在windows下和linux下的区别