1. 程式人生 > >用JAVA編寫漢諾塔程式

用JAVA編寫漢諾塔程式

漢諾塔問題:三根堅柱和一組中間有洞能在柱子上滑動的盤子,每個盤子有不同的直徑。初始時,所有的盤子按照大小依次堆放在一個柱子上,最大的盤子在最下面。

目標:將所有的盤子從初始的第一根柱子移動到第三根柱子上,可以借用額外的第二根柱子作為臨時存放盤子的地方,但是移動過程中必須遵守以下規則:

1.一次只能移動一個盤子

2.不能把大盤子壓在小盤子上面

3.除去移動的瞬間,所有盤子必須在柱子上。

思想:遞迴。要將N個盤子移到目標柱子上:

(1)將N-1個盤子移動到額外的柱子上

(2)將最大的盤子移到目標柱子上

(3)將N-1個盤子從額外的柱子上移到目標柱子上

  1. package http;
  2. public class Tower {
  3. private int totalDisks;
  4. public Tower(int totalDisks){
  5. this.totalDisks=totalDisks;
  6. }
  7. public void solve(){
  8. moveTower(totalDisks,1,3,2);
  9. }
  10. private void moveTower(int numDisks,int start,int end,int temp){
  11. if (numDisks==1)
  12. moveOneDisk(start,end);
  13. else{
  14. moveTower(numDisks-1, start, temp, end);
  15. moveOneDisk(start,end);
  16. moveTower(numDisks-1,temp,end,start);
  17. }
  18. }
  19. private void moveOneDisk(int start,int end){
  20. System.out.println("將一個盤子從"+start+"移動到"+end);
  21. }
  22. }
  • import http.Tower;
  • public class SolveTower {
  • public static void main(String[] args) {
  • // TODO Auto-generated method stub
  • Tower towers=new Tower(4);
  • towers.solve();
  • }
  • }

相關推薦

JAVA編寫程式

漢諾塔問題:三根堅柱和一組中間有洞能在柱子上滑動的盤子,每個盤子有不同的直徑。初始時,所有的盤子按照大小依次堆放在一個柱子上,最大的盤子在最下面。 目標:將所有的盤子從初始的第一根柱子移動到第三根柱子

python實現

漢諾塔問題描述:   漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一

Java實現移動過程

import java.util.*; public class Main { public static void Show(int q,char w,char e) { System.out.printf("Move disk %d from %c to

一個MFC實現的程式

漢諾塔採用的是一個經典遞迴演算法,以前我在學《資料結構》時涉及過,前不久公司組織拓展活動,活動期間有一項就是移動漢諾塔,因此活動結束後我重新設計並實現了這一演算法。其中和書中講的略有區別,但大同小異,以記後來。 1 標頭檔案宣告 // 一個漢諾塔 struct stOne

java 解決 問題(遞迴演算法)

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exercise6_37 extends JApplet implements ActionListener

java程式碼--

檔名稱: HanoiTower.java package firststudy; /** * 漢諾塔問題: * @author web * */ public class HanoiTower { static int count = 1 ; //計

227.棧模擬問題

描述在經典的漢諾塔問題中,有 3 個塔和 N 個可用來堆砌成塔的不同大小的盤子。要求盤子必須按照從小到大的順序從上往下堆 (如,任意一個盤子,其必須堆在比它大的盤子上面)。同時,你必須滿足以下限制條件:(1) 每次只能移動一個盤子。(2) 每個盤子從堆的頂部被移動後,只能置放

java C201_07_07問題 c語言 c++

漢諾塔問題的描述如下:有A、B和C 3跟柱子,在A上從下往上按照從小到大的順序放著64個圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。本例項將演示如何求解3階漢諾塔問題。 package _07_第七章常見演算法

棧模擬問題-LintCode

在經典的漢諾塔問題中,有 3 個塔和 N 個可用來堆砌成塔的不同大小的盤子。要求盤子必須按照從小到大的順序從上往下堆 (如,任意一個盤子,其必須堆在比它大的盤子上面)。同時,你必須滿足以下限制條件: (1) 每次只能移動一個盤子。 (2) 每個盤子從堆的頂部

基於java遞迴演算法

1.假如a盤上有2個盤子,需要移動到c盤上,如圖: 有兩個盤子時,需要三步就可以完成,第一步:把上面的移動到b;第二步:把下面的大的移動到才c;第三步:再從b移動到c,完成; 2.假如a盤上有3個盤子,需要移動到c盤上,如圖: 當有三個盤子的時候,就需要如圖所示的7步,

java菜鳥---------java寫的問題程式

漢諾塔是遞迴裡最經典的題。 漢諾塔問題:大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。 這個

(Hanoi)java實現程式

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一

Matlab 編寫的求的小程式

function hannoi(n) if nargin == 0 n = 3; end move(n,'A','B','C'); % 將n個碟子從a經過b移動到c function move(n,a,b,c) % 如果是一個碟子,直

【算法與數據結構】問題Java實現

== oid logs pri pan pre nbsp 問題 移動 思路:遞歸 【代碼】 1 public class Main { 2 public static void hanoi(int n, int x, int y, int z) { 3

遞推遞歸組合數,,回文數問題(java

char n-1 判斷 resource int swa one ise tex 遞推遞歸組合數: 1 思路:用函數求得n!,調用函數計算結果流程圖 2 .1流程圖 3 .1源代碼: import java.util.Scanner; public class

課程作業03:遞歸方法計算組合數、解決問題、判斷某個字符串是否回文

java class ply math alt static multi 構造 strong 課後作業1:使用計算機計算組合數 (1)使用組合數公式利用n!來計算 程序設計思想: 設計並調用大數求階乘的方法結合組合數公式計算組合數的值。 程序流程圖: 程序源代碼

遞歸方法解決問題(Recursion Hanoi Tower Python)

else tro 如果 strong noi ron 最小 傳說 大小 漢諾塔問題源於印度的一個古老傳說:梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。梵天命令婆羅門把圓盤按大小順序重新擺放在另一根柱子上,並且規定小圓盤上不能放大

Python問題遞迴演算法與程式

漢諾塔問題: 問題來源:漢諾塔來源於印度傳說的一個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一回只能移動一個圓盤,只能移動在最頂端的圓盤。有預言說

圖解Python實現經典遞迴

感謝漂流的雲的圖解漢諾塔問題(遞迴求解) (1)先從最簡單的模型開始,假如A柱有2個盤,我們的任務是把這兩個盤按照規則(小疊在大上)移到C柱。操作步驟如下所示: (2)現在把原始時A柱盤子數增加到100,那步驟不言而喻變得很複雜,但是我們可以通過一種方法把複雜的問題簡單化: 可能此時你會

JAVA:

//漢諾塔問題 public static void move(int num,char src,char aim){ System.out.printf("第%d號盤子,從%c位置移動到%c位置;",num,src,aim); } public static void hanuota(i