




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2.4題馬踏棋盤題目:設(shè)計一個國際象棋的馬踏棋盤的演示程序班級:姓名:學(xué)號:完成日期:1 需求分析(1)輸入的形式和輸入值的范圍:輸入馬的初始行坐標(biāo)X和列坐標(biāo)Y,X和Y的范圍都是1,8。(2)輸出形式:以數(shù)組下表的形式輸入,i為行標(biāo),j為列標(biāo),用空格符號隔開。以棋盤形式輸出,每一格打印馬走的步數(shù),這種方式比較直觀(3)程序所能達(dá)到的功能:讓馬從任意起點出發(fā)都能夠遍歷整個8*8的棋盤。(4)測試數(shù)據(jù),包括正確輸入及輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果。數(shù)據(jù)可以任定,只要1=x,y=8就可以了。正確的輸出結(jié)果為一個二維數(shù)組,每個元素的值表示馬行走的第幾步,若輸入有錯,則程序會顯示:“輸入有誤!請重
2、新輸入”并且要求用戶重新輸入數(shù)據(jù),直至輸入正確為止。2 概要設(shè)計(1) 、位置的存儲表示方式(2) typedefstruct intx; inty; intfrom;Point;(2) 、棧的存儲方式#defineSTACKSIZE70#defineSTACKINCREASE10typedefstructStack Point*top; Point*base;intstacksize;(1)、設(shè)定棧的抽象數(shù)據(jù)類型定義:ADTStack數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,n,n0 數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,n 約定an端為棧頂,ai端為棧頂。 基本操作:Ini
3、tStack(&s)操作結(jié)果:構(gòu)造一個空棧s,DestroyStack(&s)初始條件:棧s已存在。 操作結(jié)果:棧s被銷毀。 ClearStack(&s)初始條件:棧s已存在。 操作結(jié)果:棧s清為空棧。 StackEmpty(&s)初始條件:棧s已存在。 操作結(jié)果:若棧s為空棧,則返回TRUE,否則返回FALSE。 StackLength(s); 初始條件:棧s存在。操作結(jié)果:返回s的元素個數(shù),即棧的長度。GetTop(s,&e);初始條件:棧s已存在且非空。 操作結(jié)果:用e返回s的棧頂元素。Push(&s,e) 初始條件:棧s已存在。操作結(jié)果:插入元素e為新的棧頂元素。Pop(&s,&e)初
4、始條件:棧s存在且非空。操作結(jié)果:刪除棧頂元素,并用e返回。stackTraverse(s,visit() 初始條件:棧s存在且非空。操作結(jié)果:從棧底到棧頂依次對s的每個元素調(diào)用visit()。一旦visit()失敗, 則 操作失敗。ADTStack本程序包含模塊:1、 主程序模塊:voidmain()定義變量;接受命令;處理命令;退出;2、 起始坐標(biāo)函數(shù)模塊馬兒在棋盤上的起始位置;3、 探尋路徑函數(shù)模塊馬兒每個方向進(jìn)行嘗試,直到試完整個棋盤;4、 輸出路徑函數(shù)模塊輸出馬兒行走的路徑;3 詳細(xì)設(shè)計1.函數(shù)聲明Void InitLocation(int xi,intyi);/馬兒在棋盤上的起始位
5、置標(biāo)intTryPath(inti,intj);/馬兒每個方向進(jìn)行嘗試,直到試完整個棋盤voidDisplay();/輸出馬兒行走的路徑2.起始坐標(biāo)函數(shù)模塊voidInitLocation(intxi,intyi)intx,y;/定義棋盤的橫縱坐標(biāo)變量top+;/棧指針指向第一個棧首stacktop.i=xi;/將起始位置的橫坐標(biāo)進(jìn)棧stacktop.j=yi;/將起始位置的縱坐標(biāo)進(jìn)棧stacktop.director=-1;/將起始位置的嘗試方向賦初值boardxiyi=top+1;/標(biāo)記棋盤x=stacktop.i;/將起始位置的橫坐標(biāo)賦給棋盤的橫標(biāo)y=stacktop.j;/將起始位置的
6、縱坐標(biāo)賦給棋盤的縱坐標(biāo)if(TryPath(x,y)/調(diào)用馬兒探尋函數(shù),如果馬兒探尋整個棋盤返回1否則0Display();/輸出馬兒的行走路徑elseprintf(無解);3.探尋路徑函數(shù)模塊intTryPath(inti,intj)intfind,director,number,min;/定義幾個臨時變量inti1,j1,h,k,s;/定義幾個臨時變量inta8,b18,b28,d8;/定義幾個臨時數(shù)組while(top-1)/棧不空時循環(huán) for(h=0;h=0&i=0&j8)/如果找到下一位置for(k=0;k=0&i1=0&j18)/如果找到下一位置number+;/記錄條數(shù) ah=
7、number;/將條數(shù)存入數(shù)組a8中 for(h=0;h8;h+)/根據(jù)可行路徑條數(shù)小到大按下表排序放d8中 min=9;for(k=0;kak)min=ak;dh=k;/將下表存入數(shù)組d8中s=k; as=9;director=stacktop.director;if(top=63)/如果走完整個棋盤返回1return(1);find=0;/表示沒有找到下一個位置for(h=director+1;h=0&i=0&j8)/如果找到下一位置find=1;/表示找到下一個位置Break;if(find=1)/如果找到下一個位置進(jìn)棧stacktop.director=director;/存儲棧結(jié)點的
8、方向top+;/棧指針前移進(jìn)棧stacktop.i=i;stacktop.j=j;stacktop.director=-1;/重新初始化下一棧結(jié)點的嘗試方向boardij=top+1;/標(biāo)記棋盤 else/否則退棧 boardstacktop.istacktop.j=0;/清除棋盤的標(biāo)記top-;/棧指針前移退棧 return(0);4.輸出路徑函數(shù)模塊voidDisplay()inti,j;for(i=0;iN;i+)for(j=0;jN;j+)printf(t%d,boardij);/輸出馬兒在棋盤上走過的路徑printf(nn);printf(n);四、測試數(shù)據(jù)及測試結(jié)果測試數(shù)據(jù):x=2
9、,y=3測試結(jié)果如下:5 原程序代碼#include#defineMAXSIZE100#defineN8intboard88;/定義棋盤intHtry18=1,-1,-2,2,2,1,-1,-2;/*存儲馬各個出口位置相對當(dāng)前位置行下標(biāo)的*/intHtry28=2,-2,1,1,-1,-2,2,-1;/*存儲馬各個出口位置相對當(dāng)前位置列下標(biāo)的增量數(shù)組*/structStack/定義棧類型inti;/行坐標(biāo)intj;/列坐標(biāo)intdirector;/存儲方向stackMAXSIZE;/定義一個棧數(shù)組inttop=-1;/棧指針voidInitLocation(intxi,intyi);/馬兒在棋
10、盤上的起始位置坐標(biāo)intTryPath(inti,intj);/馬兒每個方向進(jìn)行嘗試,直到試完整個棋盤voidDisplay();/輸出馬兒行走的路徑voidInitLocation(intxi,intyi)intx,y;/定義棋盤的橫縱坐標(biāo)變量top+;/棧指針指向第一個棧首stacktop.i=xi;/將起始位置的橫坐標(biāo)進(jìn)棧stacktop.j=yi;/將起始位置的縱坐標(biāo)進(jìn)棧stacktop.director=-1;/將起始位置的嘗試方向賦初值boardxiyi=top+1;/標(biāo)記棋盤x=stacktop.i;/將起始位置的橫坐標(biāo)賦給棋盤的橫坐標(biāo)y=stacktop.j;/將起始位置的縱坐
11、標(biāo)賦給棋盤的縱坐標(biāo)if(TryPath(x,y)/調(diào)用馬兒探尋函數(shù),如果馬兒探尋整個棋盤返回1否則返回0Display();/輸出馬兒的行走路徑elseprintf(無解);intTryPath(inti,intj)intfind,director,number,min;/定義幾個臨時變量inti1,j1,h,k,s;/定義幾個臨時變量inta8,b18,b28,d8;/定義幾個臨時數(shù)組while(top-1)/棧不空時循環(huán)for(h=0;h=0&i=0&j8)/如果找到下一位置 for(k=0;k=0&i1=0&j18) /如果找到下一位置number+;/記錄條數(shù)ah=number;/將條
12、數(shù)存入數(shù)組a8中for(h=0;h8;h+)/根據(jù)可行路徑條數(shù)小到大按下表排序放入數(shù)組d8中min=9;for(k=0;kak) min=ak;dh=k;/將下表存入數(shù)組d8中s=k; as=9;director=stacktop.director;if(top=63)/如果走完整個棋盤返回1return(1);find=0;/表示沒有找到下一個位置for(h=director+1;h=0&i=0&j8)/如果找到下一位置 find=1;/表示找到下一個位置 break; if(find=1)/如果找到下一個位置進(jìn)棧 stacktop.director=director;/存儲棧結(jié)點的方向top+;/棧指針前移進(jìn)棧stacktop.i=i;stacktop.j=j;stacktop.director=-1;/重新初始化下一棧結(jié)點的嘗試方向boardij=top+1;/標(biāo)記棋盤else/否則退棧boardstacktop.istacktop.j=0;/清除棋盤的標(biāo)記top-;/棧指針前移退棧 return(0);voidDisplay() inti,j; for(i=0;iN;i+) for(j=0;jN;j+)printf(t%d,boardij);/輸出馬兒在棋盤上走過的路徑printf(nn); printf(n);intmain()inti,j;intx,y;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級下冊數(shù)學(xué)教案-3.1 解決問題的策略-從條件想起丨蘇教版
- 一年級下冊數(shù)學(xué)教案-7.2 變葫蘆| 青島版(五四學(xué)制)
- Unit 3 Section A (1a-1c)教學(xué)設(shè)計 2024-2025學(xué)年人教版八年級英語上冊
- 2025年貴州機(jī)電職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫必考題
- 2025年嘉興南湖學(xué)院單招職業(yè)傾向性測試題庫完整版
- 物理-云南省三校2025屆高三2月高考備考聯(lián)考卷(六)試題和答案
- 2025年哈爾濱鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫必考題
- 2025屆黑龍江佳木斯一中高三上學(xué)期五調(diào)政治試題及答案
- 2025年度工傷賠償協(xié)議范本(房地產(chǎn)行業(yè))
- 2025年湖南都市職業(yè)學(xué)院單招職業(yè)技能測試題庫帶答案
- 酒店項目精裝修工程施工組織設(shè)計
- 小學(xué)生研學(xué)旅行展示ppt模板
- 《思想道德與法治》第一章
- 新概念英語第2冊課文word版
- 大學(xué)生職業(yè)生涯規(guī)劃(高職)PPT完整全套教學(xué)課件
- 微信小程序開發(fā)實戰(zhàn)(第2版)全套PPT完整教學(xué)課件
- 教師教學(xué)質(zhì)量評估表(自評互評生評表)
- 部編版語文四年級下冊全冊大單元整體作業(yè)設(shè)計
- 重慶自然博物館
- 收養(yǎng)人撫養(yǎng)教育被收養(yǎng)人能力的證明
- 施工升降機(jī)的安裝步驟
評論
0/150
提交評論