漢諾塔實驗報告.doc

漢諾塔實驗報告.doc

ID:52767336

大?。?17.00 KB

頁數(shù):11頁

時間:2020-03-30

漢諾塔實驗報告.doc_第1頁
漢諾塔實驗報告.doc_第2頁
漢諾塔實驗報告.doc_第3頁
漢諾塔實驗報告.doc_第4頁
漢諾塔實驗報告.doc_第5頁
資源描述:

《漢諾塔實驗報告.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、課程設計2012年12月21日目錄1、概述42、實驗目的43、問題分析54、實驗步驟55、流程圖66、程序代碼:77、程序調(diào)試與測試108、結(jié)論129、總結(jié)15一、概述數(shù)據(jù)結(jié)構(gòu)是計算機學科非常重要的一門專業(yè)基礎理論課程,要想編寫針對非數(shù)值計算問題的高質(zhì)量程序,就必須要熟練的掌握這門課程設計的知識。另外,他與計算機其他課程都有密切聯(lián)系,具有獨特的承上啟下的重要位置。擁有《數(shù)據(jù)結(jié)構(gòu)》這門課程的知識準備,對于學習計算機專業(yè)的其他課程,如操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、軟件工程的都是有益的。二、實驗目的通過本實驗,掌

2、握復雜性問題的分析方法,了解漢諾塔游戲的時間復雜性和空間復雜性。三、問題分析任務:有三個柱子A,B,C.A柱子上疊放有n個盤子,每個盤子都比它下面的盤子要小一點,可以從上到下用1,2,...,n編號。要求借助柱子B,把柱子A上的所有的盤子移動到柱子C上。移動條件為:1、一次只能移一個盤子;2、移動過程中大盤子不能放在小盤子上,只能小盤子放在大盤子上。分析:首先容易證明,當盤子的個數(shù)為n時,移動的次數(shù)應等于2^n-1。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上。根據(jù)圓盤的數(shù)量

3、確定柱子的排放順序:若n為偶數(shù),按順時針方向依次擺放ABC;若n為奇數(shù),按順時針方向依次擺放ACB。(1)按順時針方向把圓盤1從現(xiàn)在的柱子移動到下一根柱子,即當n為偶數(shù)時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。(2)接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤這一步?jīng)]有明確規(guī)定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。反復進行(1)

4、(2)操作,最后就能按規(guī)定完成漢諾塔的移動。四、實驗步驟1、用c++或c語言設計實現(xiàn)漢諾塔游戲;,2、讓盤子數(shù)從2開始到7進行實驗,記錄程序運行時間和遞歸調(diào)用次數(shù);3、畫出盤子數(shù)n和運行時間t、遞歸調(diào)用次數(shù)m的關系圖,并進行分析。五、流程圖開始輸入m(m<=20)是否繼續(xù)結(jié)束輸出結(jié)果2、否1、是六、程序代碼:#include#include//Hanoi塔classHanoi{public:Hanoi(){cout<<"請輸入你想玩的層數(shù)(1-20):";in

5、put:cin>>floor;if(floor<1

6、

7、floor>20){cout<<"層數(shù)錯誤重新輸入:";gotoinput;}cout<

8、r(inti=0;i