資源描述:
《馬踏棋盤(pán)程序設(shè)計(jì).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、......word文檔...范文范例...學(xué)習(xí)..參考問(wèn)題描述設(shè)計(jì)一個(gè)國(guó)際象棋的馬踏棋盤(pán)的演示程序?;疽髮ⅠR隨機(jī)放在國(guó)際象棋8*8的棋盤(pán)Board[8][8]的某個(gè)方格中,馬按走棋規(guī)則進(jìn)行移動(dòng)。要求每個(gè)方格只進(jìn)入一次,走遍棋盤(pán)全部的64個(gè)方格。編制非遞歸程序,求出馬的行走路線,并按求出的行走路線,將數(shù)字1,2,3…….64一次填入一個(gè)8*8的方陣輸出之測(cè)試數(shù)據(jù)可自行指定一個(gè)馬的初始位置(i,j),0<=i,j<=7.。實(shí)現(xiàn)提示一般說(shuō)來(lái),當(dāng)馬位于位置(i,j)時(shí),可以走到下列8個(gè)位置之一(i-2,j+1),(i-1,j+2),(i+1,j+2),(i+2,j+1),(i+2,j-
2、1),(i+1,j-2),(i-1,j-2),(i-2,j-1)但是,如果(i,j)靠近棋盤(pán)的邊緣,上述有些位置可能超出棋盤(pán)范圍,成為不允許的位置。8個(gè)可能位置可以用一維數(shù)組Htry1[0…7]和HTry2[0..7]來(lái)表示:Htry101234567-2-11221-1-2Htry2012345671221-1-2-2-1位于(i,j)的馬可以走到新位置是在棋盤(pán)范圍內(nèi)的(i+Htry1[h],j+Htry2[h]),其中h=0,1,….7.一.需求分析1.輸入的形式和輸入值的范圍;分開(kāi)輸入馬的初始行坐標(biāo)X和列坐標(biāo)Y,X和Y的范圍都是[0,7]。2.輸出的形式;一共提供了2種輸出方式
3、:(1)以數(shù)組下標(biāo)形式輸入,代表起始位置,i表示行標(biāo),j表示列標(biāo)。(2)以棋盤(pán)形式輸出,每一格打印馬走的步數(shù),這種方式比較直觀。3.程序所能達(dá)到的功能;讓馬從任一起點(diǎn)出發(fā)都能夠歷遍整個(gè)8×8的棋盤(pán)。......專業(yè)資料...內(nèi)容齊全...分享...下載......word文檔...范文范例...學(xué)習(xí)..參考二.概要設(shè)計(jì)1.設(shè)定棧的抽象數(shù)據(jù)類型定義:ADTStack{數(shù)據(jù)對(duì)象:D={ai
4、ai∈CharSet,i=1,2..,n}數(shù)據(jù)關(guān)系:R1={
5、ai-1,ai∈D,i=2,...,n}基本操作:(這里僅列舉本題中使用的操作)InitStack(&S)操作結(jié)果:構(gòu)建
6、一個(gè)空棧。Push(&S,e)操作結(jié)果:在棧頂插入新的元素。Pop(&S,&e)操作結(jié)果:將棧頂元素彈出。SetTop(S,&e)操作結(jié)果:將e設(shè)為棧頂元素。GetTop(S,&e)操作結(jié)果:將棧頂元素取出。StackEmpty(S)判斷棧是否為空}ADTStack2.本程序包含2個(gè)模塊(1).主程序模塊:Voidmain(){初始化棋盤(pán);while(1){接受命令;處理命令;}執(zhí)行Path(x,y);}(2).棧模塊-實(shí)現(xiàn)棧抽象數(shù)據(jù)類型3.探討每次選擇位置的“最佳策略”思路1)先求出每個(gè)坐標(biāo)點(diǎn)的權(quán)值,即是該坐標(biāo)下一步有幾個(gè)方向可以走2)權(quán)值越小,則被上一點(diǎn)選中的可能性就越大,下一個(gè)
7、方向八個(gè)值的選擇順序保存MAP[X][Y][K]數(shù)組中,0<=K<=7,例如MAP[X][Y][0]保存的是下一步優(yōu)先選擇走的方向,MAP[X][Y][7]就是最后才走的。邊界的點(diǎn)最先走,然后再走中間。4.踏遍棋盤(pán)偽碼算法:While()......專業(yè)資料...內(nèi)容齊全...分享...下載......word文檔...范文范例...學(xué)習(xí)..參考{若已經(jīng)走了64步,則{打印輸出結(jié)果;}否則{若該點(diǎn)所有方向已走完{出棧}若該點(diǎn)所有方向未走完{若該點(diǎn)未走過(guò)且在棋盤(pán)內(nèi){入棧,已走步數(shù)加1}否則{*下一步方向加1}}}}三.詳細(xì)設(shè)計(jì)1.棧類型structSElemType{inta;intb
8、;intdi;//方向編號(hào)intflag[8];//訪問(wèn)過(guò)的方向數(shù)};棧的順序存儲(chǔ)表示typedefstructSqStack{SElemType*base;SElemType*top;intstacksize;};?;静僮鳎篠tatusInitStack(SqStack*S){/*構(gòu)造一個(gè)空棧S*/(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/*存儲(chǔ)分配失敗*/(*S).top=(*S).base;(*S).stacksize=STACK_
9、INIT_SIZE;returnOK;}StatusStackEmpty(SqStackS)......專業(yè)資料...內(nèi)容齊全...分享...下載......word文檔...范文范例...學(xué)習(xí)..參考{/*若棧S為空棧,則返回TRUE,否則返回FALSE*/if(S.top==S.base)returnTRUE;elsereturnFALSE;}StatusGetTop(SqStackS,SElemType*e){/*若棧不空,則用e返回S的棧頂元素,并