1. 程式人生 > >演算法分析與設計基礎(1)漢諾塔問題

演算法分析與設計基礎(1)漢諾塔問題

問題描述就不說了,自行百度。問題求解的思路本來想用文字描述一下的,結果發現知乎上有人發了個圖,我覺得解釋的十分清楚。下面貼圖:






總結出來一共就三步:

  1. 將底盤n以上的環(n-1個)移動到B
  2. 將底盤n從A移動到C
  3. 將B上的環(n-1個)移動到C
下面貼上java實現程式碼:
import java.util.Scanner;

public class HanoiTower {


	public static void process(int level, char from, char infor, char to){
		if(level == 1){
			System.out.println("從"+from+"移動盤子"+level+"號到"+to);
		}
		else{
			process(level-1, from, to, infor);
			System.out.println("從"+from+"移動盤子"+level+"號到"+to);
			process(level-1, infor, from, to);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("請輸入漢諾塔層數");
		int level = input.nextInt();
		process(level,'A','B','C');
	}

}

參考文獻:

1.知乎:如何理解漢諾塔的遞迴 https://www.zhihu.com/question/24385418

相關推薦

演算法分析設計基礎1問題

問題描述就不說了,自行百度。問題求解的思路本來想用文字描述一下的,結果發現知乎上有人發了個圖,我覺得解釋的十分清楚。下面貼圖: 總結出來一共就三步: 將底盤n以上的環(n-1個)移動到B將

演算法分析設計課程1:Add Two Numbers

Description: You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and

演算法分析設計基礎 清華版

Taken from "Introduction to The Design and Analysis of Algorithms" by Anany Levitin 節選自《演算法設計與分析基礎》潘彥 譯 蠻力法 就像寶劍不是撬棍一樣,科學也很少使用蠻力。 ——Edward Lytton (183

演算法分析設計基礎 第二章謎題

習題2.1 4. a. 選擇手套 在一個抽屜裡有22隻手套:5雙紅手套、4雙黃手套和2雙綠手套。你在黑暗中挑選手套,而且只能在選好以後才能檢查它們的顏色。在最優的情況下,你最少選幾隻手套就能找到一雙匹配的手套?在最差的情況下呢? 解答:最優情況:2只;最差情況:12只。

大資料分析挖掘筆記1

第一章 緒論 大資料特點:4V 容量Volume 多樣性Variety 速度Velocity 價值Value 資料分析時用適當的統計分析方法,對收集來的大量資料進行分析,提取有用資訊和形成結論並對資料加以詳細研究和概括總結的過程。 分為

Matlab GUI 介面設計基礎1

matlab建立GUI有兩種方式,一種是用指令碼編寫,一種是用GUIDE建立。GUIDE 編寫GUI 方便、高效、性對比較簡單。 一、建立或開啟GUI 在Command 裡面輸入 GUIDE ,或者在open 選單裡建立或開啟 GUI(Graphical

系統分析設計作業8

使用ECB實現make reservation用例的詳細設計(包含用例簡介,順序圖,類圖)1.用例簡介用例模型如下make reservation包含4個主要用例:1.查詢酒店      2.預定酒店 

演算法之路----又稱河內之

漢諾塔是很簡單也很經典的演算法之一。 漢諾塔是根據一個傳說形成的數學問題: 有三根杆子A,B,C 。A杆上有N個(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至C杆: * 1 每次只能移動一個圓盤; * 2 大盤不能疊在小盤上面。 提示:可將圓

第二週——專案3複雜度體驗2

/* *Copyright (c++) 2015,煙臺大學計算機學院 *All rights reserved. *檔名稱:hut.cpp *作者:商文軻 *完成日期:2014年9月17日 *版本號:vc6.0 *問題描述:用

用C語言解決hanoi問題——函式的遞迴呼叫

#include <stdio.h> void main() { void hanoi(int n,char one,char two,char three); int n; printf("請輸入需要移動的盤子數:\n"); scanf("%d",&n

Hanoijava實現程式

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

第二週專案3-體驗複雜度2

問題及程式碼: /* *煙臺大學計算機與控制工程學院 *檔名稱:lulu.cpp *作 者:蘆亞茹 *完成日期:2015年9月13日 *問題描述:漢諾塔 *輸入描述:無 *程

C/C++ 演算法分析設計:貪心整數配對

題目描述 江鳥想到一個有趣的問題:給你N個正整數,你可以將這N個整數按兩個一組的方式成對劃分,當然其中的元素也可以不和其他元素配對劃分。現在的問題是,讓劃分為一對的元素的乘積與未配對的元素相加求和,並且讓和最大。比如:考慮這個集合{0,1,2,4,5,3},如果我們讓{0,3}、{2,5}分別成

C/C++ 演算法分析設計:貪心排隊接水

題目描述 N個人同時提水到一個水龍頭前提水因為大家的水桶大小不一,所以水龍頭注滿第i(i=1,2,3......N)個人所需要的時間是T(i) 編寫一個程式,對這N個人使他們花費的時間總和最小,並求出這個時間。 例如有三個人a,b,c,用時分別是2,1,3 排隊順序為c,b,a的時候,c要等

C/C++ 演算法分析設計:貪心守望者的逃離

題目描述 惡魔獵手尤迫安野心勃勃.他背叛了暗夜精靈,率深藏在海底的那加企圖叛變:守望者在與尤迪安的交鋒中遭遇了圍殺.被困在一個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去,到那時,刀上的所有人都會遇難:守望者的跑步速度,為17m/s, 以這樣的速度是無法逃離荒島的

演算法分析設計第十四次作業leetcode中Cherry Pickup題解

題解正文 題目描述 問題分析 此題給出一個n乘n矩陣,矩陣中值可以是0/1/-1。 要求我們找出從(0,0)出發,到(n-1,n-1),然後回到(0,0)的路徑,要求往程只能向右向下,而返程只能向左向上走,並且路徑沒有經過值為-1的位置。 然後求出符合上述要求的路徑中,所經

演算法分析設計

一、演算法的定義 滿足五個條件:可行性、確定性、輸入、輸出、有窮性 滿足前四個條件為計算過程(OS) 二、演算法複雜性分析 時間複雜性:對該輸入需要產生的原子操作的步數(是輸入大小的函式) 空間複雜性:演算法所需要的儲存空間 三、計算複雜性函式的階 階:描述增長

演算法分析設計第五次作業leetcode 中 Majority Element 題解

心得體會 這個題目有兩個版本Majority Element,和Majority Element II,解題的方法比較巧妙,有點想不到的感覺,並且證明過程也很有趣,所以就記錄下來(具體詳情見正文題解)。 題解正文 題目描述 問題分析 題目要求majority

C/C++ 演算法分析設計:貪心搬運工

題目描述 搬運工的工作非常辛苦,不僅是因為要費體力,而且幹活要有技巧,不能總是用蠻力。假設你是一名搬運工,給定一個最大載重量為M公斤的卡車和N種食品,有食鹽,白糖,大米等。已知第 i 種食品的擁有Wi 公斤,其商品價值為Vi元/公斤,程式設計確定一個裝貨方案,使得裝入卡車中

C/C++ 演算法分析設計:貪心等價交換

題目描述 黑龍江的五常大米全國聞名,每年到了秋天,農民們把自己家的大米到集市上去買,但由於五常地區還是一個比較落後的地方,還實行物物交換,即農民用大米換白麵,可以用來蒸饅頭啊!每個集市上大米換白麵的比例並不相等,如何能用最少的大米換到最多的白麵呢?(單位是斤) 輸入 輸