人工智能技術(shù)課程設(shè)計報告文檔_第1頁
人工智能技術(shù)課程設(shè)計報告文檔_第2頁
人工智能技術(shù)課程設(shè)計報告文檔_第3頁
人工智能技術(shù)課程設(shè)計報告文檔_第4頁
人工智能技術(shù)課程設(shè)計報告文檔_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

人工智能課程設(shè)計報告

人工智能課程設(shè)計報告目錄一、概述、設(shè)計題目………………、系統(tǒng)主要內(nèi)容與功能…………………二、設(shè)計流程及描述、設(shè)計流程圖……………、設(shè)計思路簡介…………三、運行界面簡介、游戲模式界面演示……………………、解答界面演示…………四、源程序代碼、游戲模式代碼…………、解答代碼………………五、課程設(shè)計體會設(shè)計體會…………………附錄參考文獻(xiàn)……………(一)概述設(shè)計題目:問題是一個古老而著名的問題,是回溯算法的典型例題。該問題是十九世紀(jì)著名的數(shù)學(xué)家高斯1850年提出:在8X8格的國際象棋上擺放八個皇后,使其不能

互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。高斯認(rèn)為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來有人用圖論的方法解出92種結(jié)果。系統(tǒng)主要內(nèi)容與功能設(shè)計內(nèi)容:在8*8的國際象棋棋盤上,放置8個皇后后,使8個棋子不能被相互對方吃掉。設(shè)計要求:(1)較好的人機操作界面,登陸界面應(yīng)有系統(tǒng)的各種功能信息。(2)能夠進(jìn)行基本的游戲操作,用不同的顏色在棋盤上表示能占用的格子和不能占用的。(3)當(dāng)程序出錯后應(yīng)能可以重新開始進(jìn)行游戲(4)此系統(tǒng)應(yīng)包括答案解答功能,其中答案解答功能應(yīng)包括各種答案的游戲界面有共92種情況。(二)設(shè)計流程及描述設(shè)計流程圖:算法基本流程圖主函數(shù):開始調(diào)用函數(shù)choose()iLine=0NiLine<8YiLine=0iLine++a[iLine]=0iColumn=0iLine<15YNiColumn<8b[iLine]=0YQueen[iLine][iColumiLine++

進(jìn)入輸入judgeswitch(judge)case’4’case’casedefaulcase’‘3’t輸入numgetchargetchar調(diào)用函數(shù)exichoosenum<0||mum>92-YN調(diào)用函數(shù)choose()退出結(jié)束2.2設(shè)計思路簡介:由于這是一個平面上的棋子布局處理問題,因此我們可以將問題堪稱一個2維數(shù)組問題,不妨設(shè)這個8*8數(shù)組A,并假定第一行是為后一位置的位置,第二行為后衛(wèi)放置的位置,依次類推,8行分別存放8個后的位置,為了簡便處理,我們先將A(8,8)

的初值設(shè)為1,一旦一個位置存放一個后,則其他后不能處于同一行,同一列,同一個斜線,將這些位置的數(shù)組元素的值設(shè)為0。1.1在其中一個位置上有一后的數(shù)據(jù)處理設(shè)第m行,n列有一個后,則根據(jù)原則,分別從八個不同的方向?qū)?yīng)的元素置為0。第K個后的位置設(shè)定假定前面:k-1個后的位置已經(jīng)確定,則第:K個后只能放置在第K行中元素不為0的位置上。因此只需找到這個不為0的元素A(K,J),J就是第K個后的位置。最后一個后的位置確定如果第8行中有元素不為0,則表明你已經(jīng)找到了一種擺法,可以通過文本框text1輸將文本框的ScrollBar的屬性設(shè)為2-Vertivcal,Multiline屬性設(shè)為true。但是輸出后還要尋找是否有其它的擺法?如果第8行中元素均為0,則表明你的這種擺法不行,還得要嘗試其它的方法,看看是否能行?但是,如何嘗試其它的擺法呢?這就是問題的關(guān)鍵所在,需要我們回溯到以前的狀態(tài),重新擺放!回溯處理回溯到以前的狀態(tài)可以用下面的算法來實現(xiàn):(1)尋找到第:個后的位置。(2)將當(dāng)前數(shù)組6的值全部保存到另外一個數(shù)組中,以便回溯時用到。(3)進(jìn)行%7%的數(shù)據(jù)處理。(4)尋找下一個后的位置。(5)不管是否找到正確擺放方法,都應(yīng)當(dāng)去嘗試其它方法。因此,必須再將B中的數(shù)據(jù)還原到數(shù)組A中進(jìn)行回溯處理。至此,八皇后問題的算法已基本解決,用戶可以從第一個后開始得到的92種不同的算法。2、算法改進(jìn),通過多重循環(huán)逐個處理,完成設(shè)計,最終由于通過多重循環(huán)進(jìn)行處理,8個后就需要8重循環(huán)處理,使得程序就顯得很長,效率不是很高,能否通過改進(jìn)程序來提高效率?值得我們?nèi)ヌ接?。對?shù)據(jù)處理的改進(jìn)根據(jù)問題的實際情況,由于后是按順序進(jìn)行處理的,因此當(dāng)你處理到第K個后時,前面K-1個的位置已經(jīng)確立,也就是說前面K-1行數(shù)據(jù)已經(jīng)處理完畢,所以沒有必要在中對向左上,向上,向右上三個方向的數(shù)據(jù)進(jìn)行處理,只需要處理中其它5個方向即可。保存數(shù)據(jù)的改進(jìn)將數(shù)組A的當(dāng)前狀態(tài)存放到B數(shù)組中去,以便將來回溯時使用。由于回溯并不是回到初始狀態(tài),因此沒有必要將整個數(shù)組全部保存,只需部分保存即可。例如,你在處理第K個后時,只要將第K行到第8行數(shù)組A中的數(shù)據(jù)保存?;厮輹r,只要將第K行之后的元素還原即可。多重循環(huán)的改進(jìn)8個后,使用8重循環(huán),而且處理的方法類同,使得我們的程序冗長,用戶可以使用遞歸算法來縮短程序的長度。算法如下:

(7)如果找到擺法,在文本框中輸出。(8)K=K-1游戲運行界面:很明顯此游戲完成失??!成功的完成游戲?。?/p>

此為其計算的結(jié)果,共有92中選擇自己希望的答案組數(shù)以上為對應(yīng)的顯示的答案,從中可以看出游戲成功!四、源程序代碼、游戲模式代碼OptionExplicitDimSd(63)AsInteger

DimCntAsIntegerPrivateSubForm_Load()八皇后游戲=5000=5500DimmAsInteger,nAsIntegerWithPicture1(0).Left=500.Top=500.Width=500.Height=500.BackColor=vbWhiteEndWith'初始化,載入8*8個格Form=0To7Forn=0To7Ifm=0Andn=0Thenn=1LoadPicture1(m*8+n)WithPicture1(m*8+n).Left=(n+1)*500.Top=(m+1)*500.Width=500.Height=500.BackColor=vbWhite.Visible=TrueEndWithNextNextEndSubPrivateSubhp_Click()請在下面8*8共64個方格中填入8個綠色方格求這8個綠色方格兩兩之間不能共行或共列,也不能共斜線要編寫游戲幫助EndSubPrivateSubPicture1_Click(IndexAsInteger)IfPicture1(Index).BackColor=vbWhiteThen'未用Picture1(Index).BackColor=vbGreen'該格標(biāo)綠,說明已選中Cnt=Cnt+1已放入個皇后IfCnt=8Then恭喜您成功完成??!強人!!強烈恭喜!CallReSt_ClickExitSubEndIfElseIfPicture1(Index).BackColor=vbGreenThen'已選用,撤銷

Picture1(Index).BackColor=vbWhite'該格標(biāo)白,說明未用Cnt=Cnt-1已放入個皇后ElseExitSubEndIfDimmAsInteger,nAsInteger,pAsInteger,qAsInteger獲得當(dāng)前行n=IndexMod8'獲得當(dāng)前列DimfcAsColorConstantsDimtmpaddAsIntegerIfPicture1(Index).BackColor=vbWhiteThenfc=vbWhitetmpadd=-1EndIfIfPicture1(Index).BackColor=vbGreenThenfc=vbRedtmpadd=1EndIf'同行變色p=m-1DoWhilep>=0WithPicture1(p*8+n).BackColor=fcSd(p*8+n)=Sd(p*8+n)+tmpaddIfSd(p*8+n)>0Then.BackColor=vbRedElseIfSd(p*8+n)<0ThenSd(p*8+n)=0EndIfEndWithp=p-1Loopp=m+1DoWhilep<=7WithPicture1(p*8+n).BackColor=fcSd(p*8+n)=Sd(p*8+n)+tmpaddIfSd(p*8+n)>0Then.BackColor=vbRedElseIfSd(p*8+n)<0ThenSd(p*8+n)=0EndIfEndWithp=p+1Loop

'同列變色q=n-1DoWhileq>=0WithPicture1(m*8+q).BackColor=fcSd(m*8+q)=Sd(m*8+q)+tmpaddIfSd(m*8+q)>0Then.BackColor=vbRedElseIfSd(m*8+q)<0ThenSd(m*8+q)=0EndIfEndWithq=q-1Loopq=n+1DoWhileq<=7WithPicture1(m*8+q).BackColor=fcSd(m*8+q)=Sd(m*8+q)+tmpaddIfSd(m*8+q)>0Then.BackColor=vbRedElseIfSd(m*8+q)<0ThenSd(m*8+q)=0EndIfEndWithq=q+1Loop'左斜變色p=m-1:q=n+1DoWhilep>=0Andq<=7WithPicture1(p*8+q).BackColor=fcSd(p*8+q)=Sd(p*8+q)+tmpaddIfSd(p*8+q)>0Then.BackColor=vbRedElseIfSd(p*8+q)<0ThenSd(p*8+q)=0EndIfEndWithp=p-1:q=q+1Loopp=m+1:q=n-1DoWhilep<=7Andq>=0WithPicture1(p*8+q).BackColor=fcSd(p*8+q)=Sd(p*8+q)+tmpadd

IfSd(p*8+q)>0Then.BackColor=vbRedElseIfSd(p*8+q)<0ThenSd(p*8+q)=0EndIfEndWithp=p+1:q=q-1Loop'左斜變色p=m-1:q=n-1DoWhilep>=0Andq>=0WithPicture1(p*8+q).BackColor=fcSd(p*8+q)=Sd(p*8+q)+tmpaddIfSd(p*8+q)>0Then.BackColor=vbRedElseIfSd(p*8+q)<0ThenSd(p*8+q)=0EndIfEndWithp=p-1:q=q-1Loopp=m+1:q=n+1DoWhilep<=7Andq<=7WithPicture1(p*8+q).BackColor=fcSd(p*8+q)=Sd(p*8+q)+tmpaddIfSd(p*8+q)>0Then.BackColor=vbRedElseIfSd(p*8+q)<0ThenSd(p*8+q)=0EndIfEndWithp=p+1:q=q+1LoopEndSubPrivateSubReSt_Click()DimmAsIntegerForm=0To63Picture1(m).BackColor=vbWhiteSd(m)=0NextCnt=0已放入個皇后EndSub、解答代碼

OptionExplicitDimCountAAsIntegerDimAnsw()AsIntegerPrivateSubForm_Load()八皇后求解=5000=5500DimmAsInteger,nAsIntegerWithPicture1(0).Left=500.Top=500.Width=500.Height=500.BackColor=vbWhiteEndWith'初始化,載入8*8個格Form=0To7Forn=0To7Ifm=0Andn=0Thenn=1LoadPicture1(m*8+n)WithPicture1(m*8+n).Left=(n+1)*500.Top=(m+1)*500.Width=500.Height=500.BackColor=vbWhite.Visible=TrueEndWithNextNextEndSubPrivateSubForm_Unload(CancelAsInteger)Close答案數(shù)據(jù)EndSubPrivateSubPicture1_Click(IndexAsInteger)EndSubPrivateSubStart_Click()'以第0行起始,起始時皇后數(shù)Cnt為0DimCurRowAsIntegerDimCntAsIntegerDimkAsInteger,mAsInteger,nAsIntegerDimStas(7,7)AsBoolean'表示該位是否可用CurRow=0Cnt=0'初始化各格狀態(tài),均為可用

Form=0To7Forn=0To7Stas(m,n)=TrueNextNextCallEp(Stas,CurRow,Cnt)ReDimAnsw(1,7,CountA-1)'讀入答案數(shù)據(jù)答案數(shù)據(jù)Fork=0ToCountA-1Form=0To7Forn=0To1Input#1,Answ(n,m,k)Next共有NextNext組答案解題完成EndSubPrivateSubEp(ByRefSts()AsBoolean,ByValSubRowAsInteger,ByValSubCntAsInteger)DimmAsInteger,nAsInteger,kAsIntegerDimSubSts(7,7)AsBooleanFork=0To7IfSts(SubRow,k)ThenIfSubCnt+1=8ThenCallOts(Sts)'已填完八個皇后,輸出CountA=CountA+1ExitSubEndIfIfSubRow+1=8ThenExitSubEndIf'復(fù)制狀態(tài)數(shù)組Form=0To7Forn=0To7SubSts(m,n)=Sts(m,n)NextNextCallChgSt(SubSts,SubRow,k)'放入皇后,依皇后位置調(diào)整狀態(tài)數(shù)組CallEp(SubSts,SubRow+1,SubCnt+1)EndIfNextEndSubPrivateSubChgSt(ByRefSbsts()AsBoolean,ByValRowAsInteger,ByValColAsInteger)'由皇后位置(Row,Col),改變狀態(tài)

DimmAsInteger,nAsInteger'行變m=RowDoWhilem-1>=0m=m-1Sbsts(m,Col)=FalseLoopm=RowDoWhilem+1<=7m=m+1Sbsts(m,Col)=FalseLoop'列變n=ColDoWhilen-1>=0n=n-1Sbsts(Row,n)=FalseLoopn=ColDoWhilen+1<=7n=n+1Sbsts(Row,n)=FalseLoop'左上右下斜m=Row:n=ColDoWhilem-1>=0Andn-1>=0m=m-1:n=n-1Sbsts(m,n)=FalseLoopm=Row:n=ColDoWhilem+1<=7Andn+1<=7m=m+1:n=n+1Sbsts(m,n)=FalseLoop'左下右上斜m=Row:n=ColDoWhilem-1>=0Andn+1<=7m=m-1:n=n+1Sbsts(m,n)=FalseLoopm=Row:n=ColDoWhilem+1<=7Andn-1>=0m=m+1:n=n-1Sbsts(m,n)=FalseLoopEndSub

PrivateSubOts(ByRefGetSts()AsBoolean)DimmAsInteger,nAsInteger答案數(shù)據(jù)Form=0To7Forn=0To7IfGetSts(m,n)ThenWrite#1,m,nEndIfNextNextClose#1EndSubPrivateSubSw_Click()DimkAsInteger,mAsInteger,nAsInteger顯示第幾組答案選擇答案號Ifk<1Ork>92OrInt(k)<>kThen組號不對ExitSubEndIfForm=0To7Forn=0To7Picture1(m*8+n).BackColor=vbRedNextNextForn=0To7Picture1(Answ(0,n,k-1)*8+Answ(1,n,k-1)).BackColor=vbGreenNextEndSub五、課程設(shè)計體會第一次接觸這個題目覺得很容易,可是當(dāng)自己真正去做的時候才知道有很多東西都有很大的問題,剛開始準(zhǔn)備用C語言寫的,后來選擇了VB,于是就花了2周時間去看了下VB的基本的編程方法,發(fā)現(xiàn)很容易上手,就慢慢的開始進(jìn)行了設(shè)計。但是可能是急于求成,在設(shè)計中程序一直無法運行,后來才

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論