汉诺塔迭代算法(Towers of Hanoi, classic problem (recursiv

//Towers of Hanoi, classic problem (recursive method)
//Java how to program, 5/e, Exercise 6.37-38
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HanoiTowers extends JApplet implements ActionListener {
 int number, starting, destination, temp;
 JLabel numberLabel, startingLabel, destinationLabel, tempLabel;
 JTextField numberField, startingField, destinationField, tempField;
 JTextArea output;
 JScrollPane scroller;

 public void init()
 {
     
     Container  container=getContentPane();
     container.setLayout(new FlowLayout());
     
     numberLabel= new JLabel("Enter the number of disks:");
     container.add(numberLabel);
     
     numberField=new JTextField(10);
     container.add(numberField);
     
     startingLabel= new JLabel("Enter the starting tower:");
     container.add( startingLabel);
     
     startingField=new JTextField(10);
     container.add( startingField);
     
     destinationLabel= new JLabel("Enter the destination tower:");
     container.add(destinationLabel);
     
     destinationField=new JTextField(10);
     container.add(destinationField);
     
     tempLabel= new JLabel("Enter the temporary tower:");
     container.add(tempLabel);
     
     tempField=new JTextField(10);
     container.add(tempField);
     
    tempField.addActionListener(this);
     
     output=new JTextArea(17,30);
     scroller=new JScrollPane(output);
     container.add(scroller);
     
     

 }
 
 public void actionPerformed (ActionEvent event)
 {
    
     number=Integer.parseInt(numberField.getText());
     starting=Integer.parseInt(startingField.getText());
     destination=Integer.parseInt(destinationField.getText());
     temp=Integer.parseInt(tempField.getText());
     HanoiRecursiveMethod(number, starting, destination, temp);
     
 }
 
 public void HanoiRecursiveMethod(int number, int starting, int destination, int temp)
 {
     if (number==1)
         output.append(starting+"--->"+destination+"n");
     else
     {
         HanoiRecursiveMethod(number-1,starting,temp,destination);
         output.append(starting+"--->"+destination+"n");
         HanoiRecursiveMethod(number-1,temp,destination,starting);
     }
     }
 
 } 

时间: 2024-10-28 10:54:20

汉诺塔迭代算法(Towers of Hanoi, classic problem (recursiv的相关文章

c#汉诺塔的递归算法与解析_C#教程

从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号. 小时候玩过这个游戏, 基本上玩到第7个,第8个就很没有耐心玩了,并且操作的动作都几乎相同觉得无聊.  后来学习编程, 认识到递归, 用递归解决汉诺塔的算法也是我除了简单的排序算法后学习到的第一种算法. 至于递归,简单来说

多柱汉诺塔最优算法设计探究

多柱汉诺塔最优算法设计探究   引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因此多柱汉诺塔的柱子个数M≥3.下面从三柱汉诺塔说起,慢慢深入我们要关心的问题. 1. 三柱汉诺塔 三柱汉诺塔是经典的汉诺塔问题,在算法设计中是递归算法的典型问题.其算法是这样的: 首先把A 柱上面的n- 1 个碟子通过C 柱移到B 柱上[T(n-1)步],然后把A 柱剩下的一个碟子移到C 柱上[1步], 最后把B 柱上所有

C++实现汉诺塔算法经典实例_C 语言

本文所述为汉诺塔算法的C++代码的经典实现方法. 汉诺塔问题描述:3个柱为a.b.c,圆盘最初在a柱,借助b柱移到c柱.需要你指定圆盘数. 具体实现代码如下: #include <iostream> using namespace std; int times = 0; //全局变量,搬动次数 //第n个圆盘从x柱搬到z柱 void move(int n, char x, char z) { cout << "第" << ++times <&l

Java数据结构及算法实例:汉诺塔问题 Hanoi_java

/** * 汉诺塔大学的时候就学过,但是根本没搞明白,唯一知道的就是要用递归的方法来求解. * 问题描述: * 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小. * 要求按下列规则将所有圆盘移至C杆: * 1.每次只能移动一个圆盘: * 2.大盘不能叠在小盘上面. * 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆, * 但都必须尊循上述两条规则. * 问:如何移?最少要移动多少次? * 解决方法: * 假设只有2个盘子,柱子分别是A, B, C柱

java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码_java

程序如下: 复制代码 代码如下: View Code  /*  * Hanoi塔游戏 问题描述:  * 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.  * 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照  * 大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小  * 顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在  * 三根柱子之间一次只能移动一个圆盘.  *   * fuction:实现 hanoi塔  *       

Go语言实现汉诺塔算法_Golang

hano.go package main import ( "bufio" "fmt" "os" "strconv" ) func main() { fmt.Print("输入要移动的盘子数:") reader := bufio.NewReader(os.Stdin) lool: data, _, _ := reader.ReadLine() n, err := strconv.Atoi(string(da

C语言递归实现汉诺塔算法

汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1) 直接将A柱子上的圆盘从A移动到C else 先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上 直接将A柱子上的第n个圆盘移动到C柱子上 最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子上 该递归算法的时间复杂度为O(2的n次方),当有n个圆盘时,需要移动圆盘2的n次方-1次 操作系统:ubuntu 编译软件:gcc 结果截

汉诺塔算法c++出现错误

问题描述 汉诺塔算法c++出现错误 #include using namespace std; //圆盘的个数最多为64 const int MAX = 64; //用来表示每根柱子的信息 struct st{ int s[MAX]; //柱子上的圆盘存储情况 int top; //栈顶,用来最上面的圆盘 char name; //柱子的名字,可以是A,B,C中的一个 int Top() //取栈顶元素 { return s[top]; } int Pop() //出栈 { return s[t

c语言算法-求大神关于4个塔座的汉诺塔问题,怎么用C语言算法解决

问题描述 求大神关于4个塔座的汉诺塔问题,怎么用C语言算法解决 .设a,b,c,d是4个塔座.开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起.各圆盘从小到大编号为1,2,3,...n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍然按同样顺序重叠.在移动圆盘时应该遵守以下移动规则. 规则1,每次只能移动1个圆盘: 规则2,任何时刻都不允许将较大的圆盘压在较小的圆盘之上: 规则3,在满足移动规则1和规则2的前提下,可将圆盘移至a,b,c,d任一塔座上. 解决方案 经典算法