Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:漢諾塔問題 Hanoi
更新時(shí)間:2015年06月20日 11:17:32 投稿:junjie
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:漢諾塔問題 Hanoi,本文直接給出實(shí)現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
/** * 漢諾塔大學(xué)的時(shí)候就學(xué)過,但是根本沒搞明白,唯一知道的就是要用遞歸的方法來求解。 * 問題描述: * 有三根桿子A,B,C。A桿上有N個(gè)(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。 * 要求按下列規(guī)則將所有圓盤移至C桿: * 1.每次只能移動(dòng)一個(gè)圓盤; * 2.大盤不能疊在小盤上面。 * 提示:可將圓盤臨時(shí)置于B桿,也可將從A桿移出的圓盤重新移回A桿, * 但都必須尊循上述兩條規(guī)則。 * 問:如何移?最少要移動(dòng)多少次? * 解決方法: * 假設(shè)只有2個(gè)盤子,柱子分別是A, B, C柱。那么只需要三步就可以把他們從A柱移到C柱, * 這三步是A->B, A->C, B->C。 * 如果盤子數(shù)n超過2呢,我們就可以把這些盤子看成由最下面的那個(gè)盤子和 上面n-1個(gè)盤子 兩部分, * 這兩部分同樣可以用上面的三步實(shí)現(xiàn)移動(dòng)。 * 也就是說我們可以通過遞歸地調(diào)用上面的步驟實(shí)現(xiàn)將所有n個(gè)盤子從A柱移動(dòng)到C柱。 */ package al; public class Hanoi { public static void main(String[] args) { Hanoi hanoi = new Hanoi(); hanoi.move(3, 'A', 'B', 'C'); } /** * @author * @param n 盤子數(shù)目 * @param from 起始柱子 * @param temp 中間柱子 * @param to 目標(biāo)柱子 */ public void move(int n, char from, char temp, char to) { if(n == 1) { System.out.println("Move 1 plate from " + from + " to " + to); } else { move(n-1, from, to, temp); move(1, from, temp, to); move(n-1, temp, from, to); } } }
您可能感興趣的文章:
- Java矩陣連乘問題(動(dòng)態(tài)規(guī)劃)算法實(shí)例分析
- Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長(zhǎng)公共子序列及最長(zhǎng)公共子字符串示例
- Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)代碼
- Java動(dòng)態(tài)規(guī)劃之編輯距離問題示例代碼
- Java面試之動(dòng)態(tài)規(guī)劃與組合數(shù)
- Java算法之最長(zhǎng)公共子序列問題(LCS)實(shí)例分析
- 淺談java實(shí)現(xiàn)背包算法(0-1背包問題)
- Java實(shí)現(xiàn)的猴子吃桃問題算法示例
- Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題示例
- java動(dòng)態(tài)規(guī)劃算法——硬幣找零問題實(shí)例分析
相關(guān)文章
Java函數(shù)式編程(三):列表的轉(zhuǎn)化
這篇文章主要介紹了Java函數(shù)式編程(二):列表的轉(zhuǎn)化,lambda表達(dá)式不僅能幫助我們遍歷集合,并且可以進(jìn)行集合的轉(zhuǎn)化,需要的朋友可以參考下2014-09-09Java 生成任意長(zhǎng)度的驗(yàn)證碼過程解析
這篇文章主要介紹了Java 生成任意長(zhǎng)度的驗(yàn)證碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Mybatis操作數(shù)據(jù)時(shí)出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?c
這篇文章主要介紹了Mybatis操作數(shù)據(jù)時(shí)出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list',需要的朋友可以參考下2023-04-04java:java.lang.ExceptionInInitializerError報(bào)錯(cuò)解決過程
這篇文章主要給大家介紹了關(guān)于java:java.lang.ExceptionInInitializerError報(bào)錯(cuò)的解決過程,java.lang.ExceptionInInitializerError 是一個(gè)異常,表示在初始化一個(gè)類的靜態(tài)變量或靜態(tài)塊時(shí)發(fā)生了錯(cuò)誤,需要的朋友可以參考下2023-10-10詳解如何將springboot項(xiàng)目導(dǎo)出成war包
這篇文章主要介紹了詳解如何將springboot項(xiàng)目導(dǎo)出成war包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10