資源描述:
《c語言解八數(shù)碼問題之人工智能實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、《人工智能導(dǎo)論》上機(jī)實(shí)驗(yàn)指導(dǎo)書11基于人工智能的狀態(tài)空間搜索策略研究——八數(shù)碼問題求解(一)實(shí)驗(yàn)軟件TC2.0或VC6.0編程語言或其它編程語言(二)實(shí)驗(yàn)?zāi)康?.熟悉人工智能系統(tǒng)中的問題求解過程;2.熟悉狀態(tài)空間的盲目搜索和啟發(fā)式搜索算法的應(yīng)用;3.熟悉對(duì)八數(shù)碼問題的建模、求解及編程語言的應(yīng)用。(三)需要的預(yù)備知識(shí)1.熟悉TC2.0或VC6.0編程語言或者其它編程語言;2.熟悉狀態(tài)空間的寬度優(yōu)先搜索、深度優(yōu)先搜索和啟發(fā)式搜索算法;3.熟悉計(jì)算機(jī)語言對(duì)常用數(shù)據(jù)結(jié)構(gòu)如鏈表、隊(duì)列等的描述應(yīng)用;4.熟悉計(jì)算機(jī)常用人機(jī)接口設(shè)計(jì)。(四)實(shí)驗(yàn)數(shù)
2、據(jù)及步驟1.實(shí)驗(yàn)內(nèi)容八數(shù)碼問題:在3×3的方格棋盤上,擺放著1到8這八個(gè)數(shù)碼,有1個(gè)方格是空的,其初始狀態(tài)如圖1所示,要求對(duì)空格執(zhí)行空格左移、空格右移、空格上移和空格下移這四個(gè)操作使得棋盤從初始狀態(tài)到目標(biāo)狀態(tài)。2541233784186765(a)初始狀態(tài)(b)目標(biāo)狀態(tài)圖1八數(shù)碼問題示意圖請(qǐng)任選一種盲目搜索算法(深度優(yōu)先搜索或?qū)挾葍?yōu)先搜索)或任選一種啟發(fā)式搜索方法(A算法或A*算法)編程求解八數(shù)碼問題(初始狀態(tài)任選),并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,得出合理的結(jié)論。2.實(shí)驗(yàn)步驟(1)分析算法基本原理和基本流程;程序采用寬度優(yōu)先搜索算法,基本
3、流程如下:11起始把s放入open表失敗成功是否open表為空表?是把open表中的第一個(gè)節(jié)點(diǎn)n移入close表否擴(kuò)展節(jié)點(diǎn)n,把其后裔放入open表的前頭是否有后繼節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn)?否是11(2)確定對(duì)問題描述的基本數(shù)據(jù)結(jié)構(gòu),如Open表和Closed表等;OPENCLOSEDS?A,B,CSB,C,D,E,FS,AC,D,E,F,GS,A,BD,E,F,G,HS,A,B,CE,F,G,H,I,JS,A,B,C,DF,G,H,I,JK,LS,A,B,C,D,EG,H,I,JK,L,M,NS,A,B,C,D,E,FH,I,JK,L,M
4、,N,O,PS,A,B,C,D,E,F,G(3)編寫算符運(yùn)算、目標(biāo)比較等函數(shù);(4)編寫輸入、輸出接口;(5)全部模塊聯(lián)調(diào);(6)撰寫實(shí)驗(yàn)報(bào)告。(五)實(shí)驗(yàn)報(bào)告要求所撰寫的實(shí)驗(yàn)報(bào)告必須包含以下內(nèi)容:1.算法基本原理和流程框圖;2.基本數(shù)據(jù)結(jié)構(gòu)分析和實(shí)現(xiàn);3.編寫程序的各個(gè)子模塊,按模塊編寫文檔,含每個(gè)模塊的建立時(shí)間、功能、輸入輸出參數(shù)意義和與其它模塊聯(lián)系等;4.程序運(yùn)行結(jié)果,含使用的搜索算法及搜索路徑等;5.實(shí)驗(yàn)結(jié)果分析;6.結(jié)論;7.提供全部源程序及軟件的可執(zhí)行程序。11附:實(shí)驗(yàn)報(bào)告格式一、實(shí)驗(yàn)問題二、實(shí)驗(yàn)?zāi)康娜?、?shí)驗(yàn)原理四、程序
5、框圖五、實(shí)驗(yàn)結(jié)果及分析六、結(jié)論七、源程序及注釋#include#includeintn,m;typedefstructNode{charmatrix[10];/*存儲(chǔ)矩陣*/charoperate;/*存儲(chǔ)不可以進(jìn)行的操作,L代表不能左移R代表不能右移U代表不能上移D代表不能下移*/charextend;/*是否可以擴(kuò)展,Y代表可以,N代表不可以*/intfather;/*指向產(chǎn)生自身的父結(jié)點(diǎn)*/}Node;charstart[10]={"83426517"};/*此處沒有必要初始化*/char
6、end[10]={"12384765"};/*此處沒有必要初始化*/Nodebase[4000];intresult[100];/*存放結(jié)果的base數(shù)組下標(biāo)號(hào),逆序存放*/intmatch()/*判斷是否為目標(biāo)*/{inti;for(i=0;i<9;i++){if(base[n-1].matrix[i]!=end[i]){return0;}}return1;}voidshow()/*顯示矩陣的內(nèi)容*/{inti=1;while(m>=0){11intmm=result[m];//clrscr();printf("狀態(tài)
7、方格tt步驟%d",i);printf("ttt%ct%ct%c",base[mm].matrix[0],base[mm].matrix[1],base[mm].matrix[2]);printf("ttt%ct%ct%c",base[mm].matrix[3],base[mm].matrix[4],base[mm].matrix[5]);printf("ttt%ct%ct%c",base[mm].matrix[6],base[mm].matrix[
8、7],base[mm].matrix[8]);//sleep(1);m--;i++;}}voidleave()/*推理成功后退出程序之前要執(zhí)行的函數(shù),主要作用是輸出結(jié)果*/{n--;while(base[n].father!=-1){result[