zoukankan      html  css  js  c++  java
  • 用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);
        }
    
    }
  • 相关阅读:
    【struts2】【2】添加interceptor出错
    C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
    Garbage Collection Essence.Net中Garbage Collection深入探讨
    数据结构C#实现二叉查找树的创建,查找,以及各种递归(非递归)遍历算法
    C#中不安全代码的编写和指针的应用
    C#中的安全策略
    系统诊断概述如何通过windbg来dump特定process的memory.
    经典数据结构之栈的应用迷宫问题
    CPU Scheduling进程调度算法
    ASP.NET中将检索出的数据写入Exel形成Report的一种solution
  • 原文地址:https://www.cnblogs.com/ghgyj/p/4004891.html
Copyright © 2011-2022 走看看