用java面向对象的思想实现的汉诺塔问题
package hanoi.com; public class Disc {
private String name;
private int level;
public Disc(){
name = "disc";
level = 0;
}
public Disc(String name, int level){
this.name = name;
this.level = level;
} public String getName() {
return name;
}
public int getLevel() {
return level;
}
@Override
public String toString() {
return "name: " + this.name + ";level: " + this.level;
}
}
package hanoi.com;
import java.util.LinkedList;
import java.util.List; public class Post {
//用来装Disc
private List<Disc> lists = new LinkedList<Disc>();
private String name;public String getName() {
return name;
} public Post(String name) {
this.name = name;
} public void add(Disc disc) {
if(disc == null) return;
this.lists.add(0, disc);
} public void add(List<Disc> discs) {
if (discs == null || discs.size() < 1) {
return;
}
lists.addAll(0, discs);
}
//当前柱子中的盘子借助middlePost移到到targetPost
public void move(Post middlePost, Post targetPost,PostMove postMove){
this.move(this.lists.size(), middlePost, targetPost, postMove);
}
private void move(int total, Post post1, Post post2,PostMove postMove) {
if(total <= 0) return;
this.move(total - 1, post2, post1,postMove); Disc disc = this.lists.remove(0);
if(postMove != null){
postMove.action(this, post1,post2, disc);
}
post2.add(disc); post1.move(total -1 ,this, post2,postMove);
} @Override
public String toString() {
return "Post [lists=" + lists + ", name=" + name + "]";
}
}
package hanoi.com; public interface PostMove {
public void action(Post scrPost,Post middlePost, Post targetPost, Disc disc);
}
package hanoi.com.test; import hanoi.com.Disc;
import hanoi.com.Post;
import hanoi.com.PostMove; public class Main { public static void main(String[] args) {
Post post1 = new Post("A");
Post post2 = new Post("B");
Post post3 = new Post("C"); post1.add(new Disc("3", 2));
post1.add(new Disc("2", 1));
post1.add(new Disc("1", 0)); System.out.println(post1);
System.out.println(post2);
System.out.println(post3); post1.move(post2, post3, new PostMove() { @Override
public void action(Post srcPost, Post middlePost,Post targetPost, Disc disc) {
System.out.println(disc + ":从"+ srcPost.getName() + "通过" + middlePost.getName() + "到达" + targetPost.getName());
}
});
System.out.println(post1);
System.out.println(post2);
System.out.println(post3);
} }
用java面向对象的思想实现的汉诺塔问题的更多相关文章
- C#中汉诺塔问题的递归解法
百度测试部2015年10月份的面试题之——汉诺塔. 汉诺塔就是将一摞盘子从一个塔转移到另一个塔的游戏,中间有一个用来过度盘子的辅助塔. 百度百科在此. 游戏试玩在此. 用递归的思想解决汉诺塔问题就是分 ...
- python实现汉诺塔程序
# 汉诺塔思想笔记# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子# 递归的思想就是把这个目标分解成三个子目标# 子目标1:将前n-1个盘子从a移动到b上# 子目标2:将最底下的最后一个盘子从a ...
- java面向对象的思想(java三大特性)
用通俗易懂的语言来理解java面向对象的思想 大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言 ...
- java实现组合数_n!_杨辉三角_组合数递推公式_回文数_汉诺塔问题
一,使用计算机计算组合数 1,设计思想 (1)使用组合数公式利用n!来计算Cn^k=n!/k!(n-k)!用递推计算阶乘 (2)使用递推的方法用杨辉三角计算Cn+1^k=Cn^k-1+Cn^k 通过数 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- 编程:递归编程解决汉诺塔问题(用java实现)
Answer: //Li Cuiyun,October 14,2016. //用递归方法编程解决汉诺塔问题 package tutorial_3_5; import java.util.*; publ ...
- java 解决汉诺塔问题
//汉诺塔问题//HanYang 2016/10/15 import java.util.Scanner; //输出public class Hanuota { public static void ...
- Java汉诺塔算法
汉诺塔问题[又称河内塔]是印度的一个古老的传说. 据传开天辟地之神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把 ...
- java 中递归的实现 以及利用递归方法实现汉诺塔
今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...
随机推荐
- 转 scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...
- jQuery滑动导航菜单
js: $(function(){ $("ul.sub").parent().append("<span></span>"); $(&q ...
- 解决iphone safari上的圆角问题
-webkit-appearance : none ; /*解决iphone safari上的圆角问题*/
- python登录豆瓣,发帖
学习了urllib.urllib2及cookielib常用方法的使用登录豆瓣,由于有验证码,采取的办法是将验证码图片下载到同目录下,查看图片后输入验证码即可登录.发帖帖子内容写死在代码中了 [Pyth ...
- java常见内存溢出(OOM)
jvm内存区域 程序计数器一块很小的内存空间,作用是当前线程所执行的字节码的行号指示器. java栈与程序计数器一样,java栈(虚拟机栈)也是线程私有的,其生命周期与线程相同.通常存放基本数据类型, ...
- hdu 3480
斜率dp #include<cstdio> #include<cstring> #include<algorithm> #include<queue> ...
- 对话 Jessica Hamrick:和 Django 的情缘是我前行的动力
本文出自 Your Django Story 系列,该系列主要突出那些贡献 Django 的女性.点击查看更多,本文系 OneAPM 工程师编译整理. Jess Hamrick 是加州大学伯克利分校心 ...
- 了解实时媒体的播放(RTP/RTCP 和 RTSP)
http://blog.csdn.net/span76/article/details/12913307 RTP/RTCP RTP是基于 UDP协议的, UDP不用建立连接,效率更高:但允许丢包, 这 ...
- 第五章 HID设备
5.1 HID介绍 为简化USB设备的开发过程,USB提出了设备类的概念.所有设备类都必须支持标准USB描述符和标准USB设备请求.如果有必要,设备类还可以自行定义其专用的描述符和设备请求,这分别被称 ...
- Using FireMonkey Layouts
FireMonkey has many layout controls to choose from. Come learn the differences and how to use them t ...