版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、人工智能( 梵塔問題)學(xué)習(xí) 好資料梵塔問題實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)?zāi)康?. 熟悉和掌握問題規(guī)約法的原理、實(shí)質(zhì)和規(guī)約過程2. 理解規(guī)約圖的表示方法3. 熟悉并掌握遞歸解決問題的思想實(shí)驗(yàn)原理1. 利用問題規(guī)約法的原理進(jìn)行問題的分析與描述2. 利用遞歸思想進(jìn)行問題的解決實(shí)驗(yàn)條件1. Window NT/xp/7 及以上的操作系統(tǒng)2. 內(nèi)存在 512M 以上3. CPU在奔騰 II 以上實(shí)驗(yàn)內(nèi)容梵塔問題源于印度古老的一個(gè)傳說。相傳開天辟地的神勃拉瑪創(chuàng)造世界時(shí)在印度北部的佛教圣地的圣廟里,安放了三根金剛石的棒,第一根上面套著64個(gè)圓的金片,最大的一個(gè)在底下,其余一個(gè)比一個(gè)小,依次疊上去,廟里的眾僧不倦地把它們一個(gè)個(gè)
2、地從這根棒搬到另一根棒上,規(guī)定可利用中間的一根棒作為幫助,但每次只能搬一個(gè),而且大的不能放在小的上面。值班僧侶按照法則日夜不停地搬運(yùn),當(dāng)搬運(yùn)完成時(shí)世界將在一聲霹靂中毀滅。實(shí)驗(yàn)分析精品資料學(xué)習(xí) 好資料我們假設(shè)把該任務(wù)交給一個(gè)僧人,為了方便敘述,將他編號(hào)為64。僧人自然會(huì)這樣想:假如有另外一個(gè)僧人能有辦法將 63 個(gè)盤子從一個(gè)座移到另一個(gè)座,那么問題就解決了,此時(shí)僧人 64 只需這樣做:1. 命令僧人 63 將 63 個(gè)盤子從 A 座移到 C 座2. 自己將最底下的最大的一個(gè)盤子從 A 座移到 C 座3. 再命令僧人 63 將 63 個(gè)盤子從 B 座移到 C 座為了解決將 63 個(gè)盤子從 A 座移
3、到 B 座的問題,僧人 63 又想:如果能再有一個(gè)僧人 62 能將 62 個(gè)盤子移動(dòng)到另一座,我就能將 63 個(gè)盤子從 A 座移動(dòng)到 B 座。他是這樣做的:1. 命令僧人 62 將 62 個(gè)盤子從 A 移動(dòng)到 C2. 自己將一個(gè)盤子從 A 座移動(dòng)到 B 座3. 再命令僧人 62 將 62 個(gè)盤子移到 B 座再進(jìn)行一次遞歸。如此“層層下放”,直到后來找到第 2 個(gè)僧人,讓他完成將2 個(gè)盤子從一個(gè)座移到另一個(gè)座,進(jìn)行到此,問題就解決了。最后找到第1 個(gè)僧人,讓他完成將一個(gè)盤子從一個(gè)座移動(dòng)到另一個(gè)座,至此,全部工作已經(jīng)完成,該煩他問題得到解決。實(shí)驗(yàn)步驟 主程序流程圖開始輸入盤子初始化過繪制初始圖漢諾
4、塔求結(jié)束主程序流程圖 梵塔求解流程圖精品資料學(xué)習(xí) 好資料開始盤子數(shù)為 n是n 為 1?否將盤子從 A 座移到遞歸調(diào)用,初始退出一級(jí)調(diào)用結(jié)束梵塔問題遞歸過程流程程序代碼#include <stdio.h>#include <graphics.h>#include <time.h>#include <dos.h>#include <math.h>#define PAOGAO 190 /*動(dòng)畫拋高,數(shù)值越小越高*/#define PANHOU 10/*#define PANAMOUNT 19 盤子數(shù) */int PANAMOUNT;type
5、def int pans;typedef struct s_pillarint amount;int x,y;pans pan20;/*存放每個(gè)盤的代號(hào) */pillars;pillars pillar4;/* 三個(gè)臺(tái)柱 */int movecount=0;/* 移動(dòng)計(jì)數(shù) */精品資料學(xué)習(xí) 好資料void drawpillar(pillars p);void init();/* 初始化函數(shù) */void drawmat(char *mat,int matsize,int x,int y,int color); /*點(diǎn)陳漢字 */void drawpan(pans p,int x,int y);
6、void zimu();/*顯示字幕 */void drawpps();/*畫裝盤的臺(tái)柱 */void hanoi();/*主算法 */void hanoi(int n,char one,char two,char three);void sdelay(int delay_t); /* 函數(shù)申明 */void finish();/*完成! */void main(void)/* 主函數(shù) */printf("ntplease input n(n<=19): ");/* 輸入要演示的盤子數(shù) */scanf("%d",&PANAMOUNT);if
7、(PANAMOUNT<1|PANAMOUNT>19)/*越界的話 n 當(dāng) 19 處理 */PANAMOUNT=19 ;init();drawpps();hanoi(PANAMOUNT,'a','b','c');finish();void init() /* 初始化函數(shù) */int gd=DETECT,gm ;int i,n,color ;clrscr();initgraph(&gd,&gm,"c:tc");cleardevice();pillar1.amount = PANAMOUNT;精品資料學(xué)習(xí)
8、 好資料pillar1.x = 105;pillar1.y = 405;for(i=1;i<=pillar1.amount;i+)pillar1.pani=pillar1.amount-i+1;pillar2.amount = 0;pillar2.x = 320;pillar2.y = 405;pillar3.amount = 0;pillar3.x = 527;pillar3.y = 405;setcolor(YELLOW);/*柱座標(biāo)記 */settextstyle(0,0,2);outtextxy(105,418,"A");outtextxy(320,418,&
9、quot;B");outtextxy(527,418,"C");setcolor(YELLOW); /*畫框 */setlinestyle(SOLID_LINE,0,NORM_WIDTH);line(0,0,0,479);line(0,0,639,0);line(639,0,639,479);line(0,479,639,479);line(0,PAOGAO-PANHOU-40,450,PAOGAO-PANHOU-40);黃/*金線 */settextstyle(0,0,1);outtextxy(250,PAOGAO-PANHOU-50,"Press A
10、NY Key to EXIT !");線上/*字 */zimu();void drawpillar(pillars p)/* 畫柱 */int x,y,mount;x=p.x;y=p.y;mount=p.amount;setfillstyle(SOLID_FILL,BROWN);bar(x,(y-mount*PANHOU-20),x+5,y);bar(x-45,y,x+55,y+5);精品資料學(xué)習(xí) 好資料void drawmat(char *mat,int matsize,int x,int y,int color)/* 依次:字模指針、點(diǎn)陣大小、起始坐標(biāo)(x,y)、顏色 */int
11、 i,j,k,n;n=(matsize-1)/8+1;for(j=0;j<matsize;j+)for(i=0;i<n;i+)for(k=0;k<8;k+)if(matj*n+i&(0x80>>k) /* 測(cè)試為 1 的位則顯示 */putpixel(x+i*8+k,y+j,color);void drawpan(pans p,int x,int y)setfillstyle(SOLID_FILL,LIGHTGRAY);bar(x-(5+5*p),y-PANHOU+1,x+(5+5*p),y);setlinestyle(SOLID_LINE,0,NORM_
12、WIDTH);setcolor(BLACK);line(x-(5+5*p),y,x+(5+5*p),y);line(x-(5+5*p),y+1,x+(5+5*p),y+1);void clearpan(pans p,int x,int y)setfillstyle(SOLID_FILL,BLACK);bar(x-(5+5*p),y-PANHOU,x+(5+5*p),y);void drawpps()/* 畫裝盤的臺(tái)柱 */pillars p;int i,j;int x,y,mount;for(i=1;i<=3;i+)p = pillari;x = p.x;y = p.y;mount =
13、p.amount;drawpillar(p);/*畫臺(tái)柱 */精品資料學(xué)習(xí) 好資料for(j=1; j<=mount ;j+)drawpan(p.panj,x,y-PANHOU*(j-1);void hanoi(int n,char one,char two,char three)void move(char x,char y);/*聲明 */if(n=1)move(one,three);elsehanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);void move(char x,char y)void cl
14、earprocess(); /*申明函數(shù) */void action();/*申明移動(dòng)動(dòng)畫函數(shù) */int ifrom,ito;pans data;int mountf,mountt;char a1;char b1;a0=x;a1='0'b0=y;b1='0'ifrom = x-96;ito = y-96;mountf = pillarifrom.amount; /* 數(shù)量 */mountt = pillarito.amount;data = pillarifrom.panmountf;pillarifrom.amount-;/* 出棧 */精品資料/*重畫 *
15、/學(xué)習(xí) 好資料sdelay(6); /*暫停屏幕 */if(movecount>=15) clearprocess();/*清除步驟提示 */movecount = movecount%15+1; /*模 20+1*/setcolor(RED);/*輸出移動(dòng)過程 */settextstyle(TRIPLEX_FONT, HORIZ_DIR, 1);outtextxy(560,30+movecount*10,a);outtextxy(580,30+movecount*10,"->");outtextxy(620,30+movecount*10,b);setfill
16、style(SOLID_FILL,BLACK);/*涂黑 _重畫 */bar(3,pillar1.y-PANHOU*19-20,584,412);drawpps();action(data,pillarifrom,pillarito);/*此處添加動(dòng)畫函數(shù) */pillarito.amount+;/* 入棧 */mountt = pillarito.amount;/* 刷新數(shù)量 */pillarito.panmountt = data;drawpps();/*重畫 */void clearprocess()int i;setfillstyle(SOLID_FILL,BLACK);for(i=0
17、;i<=16;i+)bar(545,30+i*10,638,40+i*10);sdelay(1);/*動(dòng)畫延遲 n 個(gè)(1/18.2)秒 */精品資料學(xué)習(xí) 好資料整數(shù) 1 代表 (1/18.2)秒 */void sdelay(int delay_t)clock_t start_time ;start_time=clock();while(clock()-start_time)<delay_t) ; /* 循環(huán)空語句 */void action(pans pan,pillars fromp,pillars top)/* 移動(dòng)動(dòng)畫 */float x1,y1,x2,y2;float p
18、,q,a;int x,y,temp;/* 整形變量用與當(dāng)前幀 */x1 = (float)(fromp.x);y1 = (float)(fromp.y - fromp.amount*PANHOU -20);/*PANHOU為盤厚常數(shù) ,減 20 處理,以便避開柱子 */x2 = (float)(top.x);y2 = (float)(top.y - top.amount*PANHOU);q = -sqrt(y1-PAOGAO)/(y2-PAOGAO); 此/*處注意產(chǎn)生增根 */if(1-q)/*除數(shù)不為 0*/a = (x1 - x2*q)/(1-q);elsea = (x1+x2)/2.0;p = (y2-PAOGAO)/(x2-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療保健票據(jù)處理辦法
- 餐飲業(yè)電梯施工安裝工程合同
- 智能建筑網(wǎng)線鋪設(shè)協(xié)議
- 科技期刊數(shù)字化出版技術(shù)指南
- 綠色建筑招投標(biāo)法規(guī)體系精講
- 城市交通監(jiān)理管理規(guī)范
- 大型設(shè)備焊工勞動(dòng)合同
- 物業(yè)維修技術(shù)員定向就業(yè)
- 船舶制造工程招投標(biāo)資料模板
- 旅游集團(tuán)的民主管理
- 湖南省建筑工程定額
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)《全冊(cè)完整》課件
- 整本書閱讀《平凡的世界》教案-2023-2024學(xué)年中職高一語文新教材同步教學(xué)講堂(高教版2023·基礎(chǔ)模塊上冊(cè))
- 智慧農(nóng)業(yè)魚菜共生智能溫室大棚項(xiàng)目可行性研究報(bào)告
- 浙江省杭州市小升初數(shù)學(xué)真題重組卷
- 分布式光伏經(jīng)濟(jì)評(píng)價(jià)規(guī)范
- 《水泥用鐵質(zhì)校正料》
- 社會(huì)工作服務(wù)項(xiàng)目管理課件
- 學(xué)校零星維護(hù)維修方案
- JJG 105-2019轉(zhuǎn)速表行業(yè)標(biāo)準(zhǔn)
- 流行音樂(中國(guó))
評(píng)論
0/150
提交評(píng)論