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面向对象的思想实现的汉诺塔问题的更多相关文章

  1. C#中汉诺塔问题的递归解法

    百度测试部2015年10月份的面试题之——汉诺塔. 汉诺塔就是将一摞盘子从一个塔转移到另一个塔的游戏,中间有一个用来过度盘子的辅助塔. 百度百科在此. 游戏试玩在此. 用递归的思想解决汉诺塔问题就是分 ...

  2. python实现汉诺塔程序

    # 汉诺塔思想笔记# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子# 递归的思想就是把这个目标分解成三个子目标# 子目标1:将前n-1个盘子从a移动到b上# 子目标2:将最底下的最后一个盘子从a ...

  3. java面向对象的思想(java三大特性)

    用通俗易懂的语言来理解java面向对象的思想 大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言 ...

  4. java实现组合数_n!_杨辉三角_组合数递推公式_回文数_汉诺塔问题

    一,使用计算机计算组合数 1,设计思想 (1)使用组合数公式利用n!来计算Cn^k=n!/k!(n-k)!用递推计算阶乘 (2)使用递推的方法用杨辉三角计算Cn+1^k=Cn^k-1+Cn^k 通过数 ...

  5. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  6. 编程:递归编程解决汉诺塔问题(用java实现)

    Answer: //Li Cuiyun,October 14,2016. //用递归方法编程解决汉诺塔问题 package tutorial_3_5; import java.util.*; publ ...

  7. java 解决汉诺塔问题

    //汉诺塔问题//HanYang 2016/10/15 import java.util.Scanner; //输出public class Hanuota { public static void ...

  8. Java汉诺塔算法

    汉诺塔问题[又称河内塔]是印度的一个古老的传说. 据传开天辟地之神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把 ...

  9. java 中递归的实现 以及利用递归方法实现汉诺塔

    今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...

随机推荐

  1. Jfinal 入门

    Jfinal 入门 IDE----->IDEA 新建项目 新建web项目 添加maven特性 方便导入jar包,不用一个个导入了 配置pom.xml <dependencies> & ...

  2. bzoj 4127: Abs 树链剖分

    4127: Abs Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 11  Solved: 5[Submit][Status][Discuss] Des ...

  3. 从某一日期开始过day天的日期

    一个SX问我的,我就写了写......从2010.1.1开始,给了一组测试数据3的话输出2010.1.4星期1,所以说2010.1.1是星期五,总星期就是 (day+5)%7==0?7:(day+5) ...

  4. uva 1476 - Error Curves

    对x的坐标三分: #include<cstdio> #include<algorithm> #define maxn 10009 using namespace std; do ...

  5. POJ2225+BFS

    简单的BFS   1a /* 从起点到终点 */ #include<stdio.h> #include<string.h> #include<stdlib.h> # ...

  6. android usb Host模式下与usb Hid 设备的通信

    做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...

  7. linux下查看防火墙当前状态,开启关闭等

    从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙 查看防火墙状态: /etc/init.d/iptables status 暂时关闭防火墙: /etc/init.d/iptables  ...

  8. Android开发之permission

    permission,Android权限系统. 基本上都是在manifest.xml文件中进行操作. 1.申请使用权限 申请使用权限使用标记:<uses-permission /> 比如申 ...

  9. Java实现查看当前目录下的文件

    package com.tfj.file; import java.io.File; import java.util.ArrayList; /** * @author JackSile E-mail ...

  10. VJP1071新年趣事之打牌(背包+输出路径)

    简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 #include <iostream> #include<cstdio> #include<cs ...