问题说明:
双色,三色河内塔是由河内塔演变而来的一种算法。
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);
}
}
}
}
分享到:
相关推荐
hutc-双色Hanoi塔问题 参考代码hutc-双色Hanoi塔问题 参考代码hutc-双色Hanoi塔问题 参考代码
双色Hanoi塔问题 Time Limit:3000MS Memory Limit:65536K Total Submit:320 Accepted:163 Description A、B、C 是3个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上, 由大到小 地叠在一起。各...
各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则(1):每次只能移动1个...
hanoi塔问题.dochanoi塔问题.doc
双色Hanoi塔的c语言递归代码,文件输入输出
河内塔算法使用Canvas用Vanilla Javascript编写的酷河内塔算法可视化工具现场演示:什么是河内塔河内塔是一个问题,您需要移动由尺寸减小的磁盘制成的塔。 您有一个额外的塔可以使用。 唯一的规则是您不能将较大尺寸...
汉诺塔 hanoi 代码 c++ MFC
C#图形界面汉诺塔Hanoi
汉诺塔java源码河内塔 嗨,这是一个用 Java 编写的简单 GUI 应用程序,用于演示如何以最少的步骤数(即 2 n -1 步)解决难题。 源代码在 Towers-of-Hanoi/src/src/towersofhanoi/ 它由两个类组成, 基本GUI.java ...
2:河内塔 描述: 基于第 3 章,编程问题 12 游戏河内塔由三个钉子和一组堆叠在钉子上的戒指组成。 戒指大小不一。 此处显示了五环游戏的初始配置,第一个塔的环从一英寸(在顶部)到五英寸(在底部)。 河内塔 圆环...
具体介绍在博客里面,圣诞节巨献,动画效果,圣诞节音效,安装包有点大,csdn上传不了,我放到自己的网站上了dawufan.cn/Hanoi.msi 可以下载
经典算法,汉诺塔(Hanoi)问题的解决,使用C#实现
用非递归算法实现hanoi塔的源程序及算法说明 还包含用递归算法实现hanoi塔
MFC 汉诺塔 hanoi 鼠标拖动 拖动矩形 鼠标响应 西南科技 作业。。。 做的好久才做完, 还是比较好看的 有Timer 显示图片 双缓冲绘图 图片透明度 杂七杂八什么的。。。
这是使用python语言编程的小游戏,汉诺塔hanoi,欢迎大家下载
河内塔 这个小程序会告诉你如何解决河内之塔游戏谜题 什么是“河内塔”? “河内塔”是一个数学游戏或谜题。 它由三个杆和许多不同大小的圆盘组成,可以滑到任何杆上。 拼图开始时,圆盘在一根杆上按照尺寸升序排列...
void hanoi(int n,char a,char b,char c) 实现汉诺塔的程序,用递归.
hanoi-demo:河内塔动画
hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序 hanoi塔 java 图形 演示程序
汉诺塔java源码河内塔 河内塔游戏的标准 JAVA 实现。 开始时的游戏会询问您要玩多少张光盘。 然后有 3 个阵列 - 1.Source Array 2.Destination Array 3.Auxillary Array。 您的游戏目标是将塔从源阵列移动到目标阵列...