`
橡树心
  • 浏览: 46534 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

双色,三色河内塔(Hanoi2Colors)

阅读更多
问题说明:

       双色,三色河内塔是由河内塔演变而来的一种算法。
public class Hanoi2Colors { 
    public static void help() {
        System.out.println(
              "Usage: java Hanoi2Colors number_of_disks");
        System.out.println(
              "\t number_of_disks: must be a even number.");
        System.exit(0);
    }
    
    public static void main(String[] args) {
        int disks = 0;        
        try {
            disks = Integer.parseInt(args[0]);
        } catch (Exception e) {
            help();
        }
        if ((disks <= 0) || (disks % 2 != 0)) { 
            help(); 
        }
        hanoi2colors(disks);
    }
     
    public static void hanoi(int disks, 
                      char source, char temp, char target) {
        if (disks == 1) {
            System.out.println("move disk from " 
                               + source + " to " + target);
            System.out.println("move disk from " 
                               + source + " to " + target);
        } else {        
            hanoi(disks-1, source, target, temp);
            hanoi(1, source, temp, target);
            hanoi(disks-1, temp, source, target);
        }
    }

    public static void hanoi2colors(int disks) {
        char source = 'A';
        char temp = 'B';
        char target = 'C';
        for (int i = disks / 2; i > 1; i--) {
            hanoi(i-1, source, temp, target);
            System.out.println("move disk from " 
                                   + source + " to " + temp);
            System.out.println("move disk from " 
                                   + source + " to " + temp); 
            hanoi(i-1, target, temp, source);
            System.out.println("move disk from " 
                                   + temp + " to " + target);
        }
        System.out.println("move disk from " 
                                   + source + " to " + temp);
        System.out.println("move disk from " 
                                 + source + " to " + target);
    }
} 





三色河内塔

public class Hanoi3Colors {    
    public static void help() {
        System.out.println(
              "Usage: java Hanoi3Colors number_of_disks");
        System.out.println(
      "\tnumber_of_disks: must be a number divisible by 3.");
        System.exit(0);
    }
    
    public static void main(String[] args) {
        int disks = 0;        
        try {
            disks = Integer.parseInt(args[0]);
        } catch (Exception e) {
            help();
        }
        if ((disks <= 0) || (disks % 3 != 0)) { 
            help(); 
        }
        hanoi3colors(disks);
    }
    
    public static void hanoi(int disks, 
                       char source, char temp, char target) {
        if (disks == 1) {
            System.out.println("move disk from " 
                               + source + " to " + target);
            System.out.println("move disk from "
                               + source + " to " + target);
            System.out.println("move disk from "
                               + source + " to " + target);
        } else {        
            hanoi(disks-1, source, target, temp);
            hanoi(1, source, temp, target);
            hanoi(disks-1, temp, source, target);
        }
    }
    
    public static void hanoi3colors(int disks) {
        char source = 'A';
        char temp   = 'B';
        char target = 'C';
        if (disks == 3) {
            System.out.println("move disk from " 
                            + source + " to " + temp);
            System.out.println("move disk from " 
                            + source + " to " + temp);
            System.out.println("move disk from " 
                            + source + " to " + target);
            System.out.println("move disk from " 
                            + temp + " to " + target);
            System.out.println("move disk from " 
                            + temp + " to " + source);
            System.out.println("move disk from " 
                            + target + " to " + temp);
        } else {
            hanoi(disks/3-1, source, temp, target);
            System.out.println("move disk from " 
                            + source + " to " + temp);
            System.out.println("move disk from " 
                            + source + " to " + temp);
            System.out.println("move disk from " 
                            + source + " to " + temp);
            hanoi(disks/3-1, target, temp, source);
            System.out.println("move disk from " 
                            + temp + " to " + target);
            System.out.println("move disk from "
                            + temp + " to " + target);
            System.out.println("move disk from "
                            + temp + " to " + target);
            hanoi(disks/3-1, source, target, temp);
            System.out.println("move disk from " 
                            + target + " to " + source);
            System.out.println("move disk from " 
                            + target + " to " + source);
            hanoi(disks/3-1, temp, source, target);
            System.out.println("move disk from " 
                            + source + " to " + temp);
        
            for (int i = disks / 3 - 1; i > 0; i--) {
                if (i>1) { 
                    hanoi(i-1, target, source, temp); 
                }
                System.out.println("move disk from " 
                         + target + " to " + source);
                System.out.println("move disk from " 
                         + target + " to " + source);
                if (i>1) { 
                    hanoi(i-1, temp, source, target); 
                }
                System.out.println("move disk from " 
                         + source + " to " + temp);
            }
        }
    }
}

分享到:
评论
1 楼 namelessmyth 2009-06-27  
我来顶你啦,哈哈.

相关推荐

    hutc-双色Hanoi塔问题 参考代码

    hutc-双色Hanoi塔问题 参考代码hutc-双色Hanoi塔问题 参考代码hutc-双色Hanoi塔问题 参考代码

    双色Hanoi塔问题参考代码

    双色Hanoi塔问题 Time Limit:3000MS Memory Limit:65536K Total Submit:320 Accepted:163 Description A、B、C 是3个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上, 由大到小 地叠在一起。各...

    双色Hanoi塔问题

    各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则(1):每次只能移动1个...

    hanoi塔问题 hanoi塔问题

    hanoi塔问题.dochanoi塔问题.doc

    双色Hanoi塔C代码

    双色Hanoi塔的c语言递归代码,文件输入输出

    hanoi-towers:很酷的河内塔算法可视化

    河内塔算法使用Canvas用Vanilla Javascript编写的酷河内塔算法可视化工具现场演示:什么是河内塔河内塔是一个问题,您需要移动由尺寸减小的磁盘制成的塔。 您有一个额外的塔可以使用。 唯一的规则是您不能将较大尺寸...

    汉诺塔 (hanoi) c++

    汉诺塔 hanoi 代码 c++ MFC

    C#图形界面汉诺塔Hanoi

    C#图形界面汉诺塔Hanoi

    汉诺塔java源码-Towers-of-Hanoi:河内塔拼图项目

    汉诺塔java源码河内塔 嗨,这是一个用 Java 编写的简单 GUI 应用程序,用于演示如何以最少的步骤数(即 2 n -1 步)解决难题。 源代码在 Towers-of-Hanoi/src/src/towersofhanoi/ 它由两个类组成, 基本GUI.java ...

    汉诺塔java源码-TowersOfHanoi:河内塔

    2:河内塔 描述: 基于第 3 章,编程问题 12 游戏河内塔由三个钉子和一组堆叠在钉子上的戒指组成。 戒指大小不一。 此处显示了五环游戏的初始配置,第一个塔的环从一英寸(在顶部)到五英寸(在底部)。 河内塔 圆环...

    汉诺塔河内塔源码C#

    具体介绍在博客里面,圣诞节巨献,动画效果,圣诞节音效,安装包有点大,csdn上传不了,我放到自己的网站上了dawufan.cn/Hanoi.msi 可以下载

    汉诺塔 Hanoi

    经典算法,汉诺塔(Hanoi)问题的解决,使用C#实现

    hanoi塔非递归.rar

    用非递归算法实现hanoi塔的源程序及算法说明 还包含用递归算法实现hanoi塔

    MFC 汉诺塔 hanoi

    MFC 汉诺塔 hanoi 鼠标拖动 拖动矩形 鼠标响应 西南科技 作业。。。 做的好久才做完, 还是比较好看的 有Timer 显示图片 双缓冲绘图 图片透明度 杂七杂八什么的。。。

    python编程小游戏汉诺塔hanoi

    这是使用python语言编程的小游戏,汉诺塔hanoi,欢迎大家下载

    Tower-of-Hanoi:这个小程序会告诉你如何解决河内塔游戏谜题

    河内塔 这个小程序会告诉你如何解决河内之塔游戏谜题 什么是“河内塔”? “河内塔”是一个数学游戏或谜题。 它由三个杆和许多不同大小的圆盘组成,可以滑到任何杆上。 拼图开始时,圆盘在一根杆上按照尺寸升序排列...

    汉诺塔 hanoi.cpp 用C++实现

    void hanoi(int n,char a,char b,char c) 实现汉诺塔的程序,用递归.

    hanoi-demo:河内塔动画

    hanoi-demo:河内塔动画

    hanoi塔图形演示程序java源码

    hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序

    汉诺塔java源码-towersOfHanoi:河内塔

    汉诺塔java源码河内塔 河内塔游戏的标准 JAVA 实现。 开始时的游戏会询问您要玩多少张光盘。 然后有 3 个阵列 - 1.Source Array 2.Destination Array 3.Auxillary Array。 您的游戏目标是将塔从源阵列移动到目标阵列...

Global site tag (gtag.js) - Google Analytics