使用Java實現漢諾塔問題

文章目錄

    • 漢諾塔問題

今天和大家來看看漢諾塔問題,這也是一個經典的算法

漢諾塔問題

分治算法經典問題:漢諾塔問題

漢諾塔的傳說

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

假如每秒鐘一次,共需多長時間呢?移完這些金片需要 5845.54 億年以上,太陽系的預期壽命據說也就是數百億年。真的過了 5845.54 億年,地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。

體驗完后,我們來整理下移動盤子的思路(假設有A、B、C柱子):

1、如果只有一個盤,直接可以A->C

2、如果盤子的數量 n >= 2,我就可以看做是兩個盤子。。

  • 最下邊(最大)的盤
  • 上面的盤

因此就可以走三部曲

先把最上面的盤A->B
把最下邊的盤A->C
把B塔的所有盤從B->C

在這里插入圖片描述

代碼示例:

/*** 漢諾塔問題解決* @param discNum 盤子數量* @param a A柱子* @param b B柱子* @param c C柱子*/
public static void towerOfHanoi(int discNum, char a, char b, char c) {// 如果只有一個盤if (discNum == 1) {System.out.println("第1個盤" + a + "->" + c);} else {// 盤的數量 >= 2// 1.上盤A->BtowerOfHanoi(discNum - 1, a, c, b);// 2.下盤A->CSystem.out.println("第" + discNum + "個盤" + a + "->" + c);// 3.把B柱子的所有盤子移至C柱子towerOfHanoi(discNum - 1, b, a, c);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214158.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git 克隆子目錄

背景 有時候,一個倉庫太大(包含很多個工程),下載費時,又占電腦的空間。 如何只下載其中一個工程(子目錄)呢? 稀疏檢出(Spare Checkout) git 的 Spare Chec…

Java項目-瑞吉外賣Day5

視線新增套餐功能: 創建SetmealDish,SetmealDto類,與相關的mapper,service,serviceImpl,controller類。 Setmeal表示套餐,SetmealDish表示套餐對應的菜品。 交互過程: 前端請求&a…

TCP 和 UDP 區別? 2、TCP/IP 協議涉及哪幾層架構? 3、描述下 TCP 連接 4 次揮手的過程?為什么要 4 次揮手?

文章目錄 1、TCP 和 UDP 區別?2、TCP/IP 協議涉及哪幾層架構?3、描述下 TCP 連接 4 次揮手的過程?為什么要 4 次揮手?4、計算機插上電源操作系統做了什么?5、Linux 操作系統設備文件有哪些? 1、TCP 和 UDP …

RE2文本匹配調優實戰

引言 在RE2文本匹配實戰的最后,博主說過會結合詞向量以及其他技巧來對效果進行調優,本篇文章對整個過程進行詳細記錄。其他文本匹配系列實戰后續也會進行類似的調優,方法是一樣的,不再贅述。 本文所用到的詞向量可以在Gensim訓練…

2023年度盤點:智能汽車、自動駕駛、車聯網必讀書單

【文末送書】今天推薦幾本自動駕駛領域優質書籍 前言 2023年,智能駕駛和新能源汽車行業仍然有著肉眼可見的新進展。自動駕駛技術繼續嘗試從輔助駕駛向自動駕駛的過渡,更重要的是相關技術成本的下降。根據《全球電動汽車展望2023》等行業報告&#xff0c…

進程、容器與虛擬機的區別

進程、容器與虛擬機 參考:關于進程、容器與虛擬機的區別,你想知道的都在這! 進程、容器與虛擬機的結構圖 進程 介紹 進程是一個正在運行的程序,它是一個個可執行文件的實例。當一個可執行文件從硬盤加載到內存中的時候&#xf…

如何用CHAT寫方案?

問CHAT:幫我寫一份航空無動力樂園的可執行方案 CHAT回復: 方案一:概念及地點篩選 航空無動力樂園是指以航空運動為主題,利用自然地形與風力進行滑翔、跳傘等無動力航空運動的戶外休閑娛樂樂園。鑒于此,首需要確定樂園…

Shiro 框架中如何更新Redis的超時登錄時間?

在Shiro框架中,可以通過實現SessionDAO接口來將會話信息保存到Redis中,并且可以通過實現SessionValidationScheduler接口來定期檢查會話是否過期。因此,要更新Redis中的超時登錄時間,可以按照以下步驟進行操作: 實現Se…

基于SpringBoot+Vue會員制醫療預約服務管理信息系統(Java畢業設計)

點擊咨詢源碼 大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的…

RT-Thread 工程創建(1)

方式一, 利用已經有的bsp進行創建 距離BearPi IOT Std 板 1. 下載 RT-Thread 官方 Env工具a. 下載 [Env 工具下載](https://www.rt-thread.org/download.html#download-rt-thread-env-tool) , 并解壓縮b. 將env注冊到系統中, 這樣就在右鍵菜單中出現&am…

PHP案例:探究MySQL應用開發喜好的網絡調查

文章目錄 一、知識準備(一)數據庫與表的創建(二)錄入調查選項(三)創建問卷頁面(四)處理投票數據(五)顯示調查結果二、實現步驟(一)創建數據庫與表(二)錄入若干調查選項(三)創建問卷頁面(四)創建調查結果頁面(五)體驗運行結果(六)查看最終生成的HTML代碼很…

Java - 線程間的通信方式

線程通信的方式 線程中通信是指多個線程之間通過某種機制進行協調和交互 線程通信主要可以分為三種方式,分別為共享內存、消息傳遞和管道流。每種方式有不同的方法來實現 共享內存:線程之間共享程序的公共狀態,線程之間通過讀-寫內存中的公…

前端知識筆記(四十五)———前端開發與后端開發有什么區別

前端開發和后端開發是Web開發中的兩個關鍵領域,它們負責不同的任務和功能。下面是前端開發和后端開發之間的主要區別: 前端開發: 用戶界面:前端開發主要關注用戶界面的開發,包括網頁的布局、樣式、交互等方面。前端技…

Android集成科大訊飛語音識別與語音喚醒簡易封裝

目錄 一、語音喚醒部分 1、首先在科大訊飛官網注冊開發者賬號 2、配置喚醒詞然后下載sdk 3、選擇對應功能下載 4、語音喚醒lib包全部復制到工程目錄下 5、把語音喚醒詞文件復制到工程的assets目錄 6、復制對應權限到AndroidManifest.xml中 7、喚醒工具類封裝 二、語音識…

Linux學習第46天:Linux音頻驅動試驗:能不能?不行也得行。

Linux版本號4.1.15 芯片I.MX6ULL 大叔學Linux 品人間百味 思文短情長 CAN 是目前應用非常廣泛的現場總線之一,主要應用于汽車電子和工業領域,尤其是汽車 領域,汽車上大量的傳感器與模塊都是通過 C…

十二、MapReduce概述

1、MapReduce (1)采用框架 MapReduce是“分散——>匯總”模式的分布式計算框架,可供開發人員進行相應計算 (2)編程接口: ~Map ~Reduce 其中,Map功能接口提供了“分散”的功能&#xff…

【Java期末復習資料】(1)知識點總結

本文章主要是知識點,后續會出模擬卷 以下是選擇、填空可能考的知識點,多看幾遍,混個眼熟 面向對象程序設計的基本特征是:抽象、封裝、繼承、多態(后三個是三大特性)Java源文件的擴綴名是.java編譯Java App…

知識筆記(五十三)———MySQL 刪除數據表

MySQL中刪除數據表是非常容易操作的,但是你在進行刪除表操作時要非常小心,因為執行刪除命令后所有數據都會消失。 語法 以下為刪除 MySQL 數據表的通用語法: DROP TABLE table_name ; -- 直接刪除表,不檢查是否存在 或 DROP…

neuq-acm預備隊訓練week 8 P8794 [藍橋杯 2022 國 A] 環境治理

題目描述 輸入格式 輸出格式 輸出一行包含一個整數表示答案。 輸入輸出樣例 解題思路 最短路二分 AC代碼 #include<bits/stdc.h> using namespace std; long long temp,n, Q; long long f[105][105],min_f[105][105],cut[105],dis[105][105];//cut為減少多少&#x…

寶塔面板部署Apache服務器搭建本地站點發布到公網可訪問【內網穿透】

文章目錄 前言1. 環境安裝2. 安裝cpolar內網穿透3. 內網穿透4. 固定http地址5. 配置二級子域名6. 創建一個測試頁面 正文開始前給大家推薦個網站&#xff0c;前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家…