版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 題 目: 迷宮問題</p><p> 院系名稱: 計(jì)算機(jī)學(xué)院</p><p> 專業(yè)名稱: 軟件工程</p><p><b> 一. 設(shè)計(jì)目的</b></p><p> 1.
2、熟悉C語言程序的編輯、編譯鏈接和運(yùn)行的過程,能夠熟練地編輯、編譯及調(diào)試程序。</p><p> 2.掌握文件和文件指針的概念以及文件的定義方法,學(xué)會(huì)熟練使用文件打開、關(guān)閉、讀、寫 等基本操作。</p><p> 3.熟練掌握結(jié)構(gòu)體、鏈表、指針的使用,及函數(shù)間的調(diào)用。</p><p> 4.能夠熟練運(yùn)用所學(xué)棧的相關(guān)知識(shí)及操作,順利完成題目的要求。</p&g
3、t;<p><b> 二. 設(shè)計(jì)內(nèi)容</b></p><p> 迷宮是實(shí)驗(yàn)心理學(xué)中一個(gè)古典問題。用計(jì)算機(jī)解迷宮路徑的程序,就是仿照人走迷宮。計(jì)算機(jī)解迷宮時(shí),通常用的是"窮舉求解"的方法,即從入口出發(fā),順某一方向向前探索,若能走通,則繼續(xù)往前走;否則沿原路退回,換一個(gè)方向再繼續(xù)探索,直至所有可能的通路都探索到為止。
4、 </p><p> 1.功能與數(shù)據(jù)需求 </p><p><b> 迷宮求解問題描述:</b></p><p> 以一個(gè)M×N的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計(jì)一
5、個(gè)程序,對(duì)任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。</p><p> 1.1 題目要求的功能 </p><p><b> ?。?)基本要求:</b></p><p> 首先實(shí)現(xiàn)一個(gè)以鏈表作存儲(chǔ)結(jié)構(gòu)的棧類型,然后編寫一個(gè)求解迷宮的非遞歸程序。求得的通路以二元組(i,j)的形式輸出,其中:(i,j)指迷宮中對(duì)應(yīng)的坐標(biāo)
6、。 </p><p><b> ?。?)測試數(shù)據(jù):</b></p><p> 左上角(1,1)為入口,右下角(9,8)為出口。</p><p> 左上角(1,1)為入口,右上角(1,8)為出口。</p><p><b> 如下圖所示:</b></p><p><b
7、> 1.2 擴(kuò)展功能</b></p><p> ?。?)編寫非遞歸形式的算法,求得迷宮中所有可能的通路;</p><p> ?。?)以方陣形式輸出迷宮及其通路</p><p><b> 2.界面需求</b></p><p> ?。?)在菜單中選擇要執(zhí)行的操作</p><p>
8、<b> ?。?)輸出方陣迷宮</b></p><p> ?。?)用戶自己輸入迷宮起始位置</p><p> ?。?)輸出所走的迷宮路徑</p><p> ?。?)輸出方陣路徑,并保存到文件中</p><p> 3.開發(fā)環(huán)境與運(yùn)行需求</p><p> Microsoft Visual C++
9、6.0</p><p><b> Ubuntu </b></p><p><b> 三.概要設(shè)計(jì)</b></p><p><b> 1.功能模塊圖;</b></p><p><b> 本程序包含三個(gè)模塊</b></p><p&g
10、t; ?。?)主程序模塊:void main()</p><p><b> ?。?lt;/b></p><p><b> 初始化;</b></p><p><b> do{</b></p><p><b> 接受命令;</b></p>&
11、lt;p><b> 處理命令;</b></p><p> ?。齱hile(命令!=“退出”);</p><p><b> ?。?lt;/b></p><p> ?。?)棧模塊——實(shí)現(xiàn)棧抽象數(shù)據(jù)類型</p><p> 迷宮模塊——實(shí)現(xiàn)迷宮抽象數(shù)據(jù)類型</p><p> 各
12、個(gè)模塊詳細(xì)的功能描述。</p><p> ?。?)菜單:從菜單中選擇要執(zhí)行的操作</p><p> (2)文件模塊:實(shí)現(xiàn)文件的各項(xiàng)基本操作</p><p> a)打開文件b)關(guān)閉文件</p><p> c)從文件讀信息d)向文件中寫入內(nèi)容</p><p> ?。?)棧模塊:實(shí)現(xiàn)棧的各項(xiàng)基本操作&
13、lt;/p><p> a)初始化棧b)入棧</p><p> c)出棧d)取棧頂元素</p><p> (4)迷宮模塊:求解迷宮問題</p><p> a)顯示迷宮b)獲取迷宮路徑</p><p> c)判斷當(dāng)前路徑是否走過d)獲得下一個(gè)可走的位置</p><
14、;p> e)獲得東面,南面,西面,北面相鄰的位置</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 1.功能函數(shù)的調(diào)用關(guān)系圖</p><p> 2.各功能函數(shù)的數(shù)據(jù)流程圖</p><p><b> 獲得迷宮路徑函數(shù)</b></p><p> do
15、 while (cur.x != chukou[0] || cur.y != chukou[1])</p><p> 是 否</p><p><b> else if</b></p><p><b> if</b&g
16、t;</p><p> 獲得下一個(gè)可通行的位置</p><p> if else if</p><p> else if else if</p><p><b> 3.重點(diǎn)設(shè)計(jì)及編碼</b></p><p> 獲得
17、迷宮路徑的函數(shù):</p><p> int GetMazePath()</p><p><b> {</b></p><p> MStackElem start,cur; </p><p> start.x = rukou[0];</p><p> start.y = rukou[1]
18、;</p><p> start.val = Maze[rukou[0]][rukou[1]];</p><p> cur = start; </p><p><b> do </b></p><p> { <
19、;/p><p> if (UnPass(path,cur))</p><p><b> {</b></p><p> Push(&realPath,cur);</p><p> Push(&path,cur);</p><p> cur = GetNext(cur);&l
20、t;/p><p> if (cur.x == chukou[0] && cur.y == chukou[1])</p><p><b> { </b></p><p> Push(&realPath,cur);</p><p> Push(&path,cur);</p>
21、;<p><b> return 1;</b></p><p><b> }</b></p><p> else if(cur.val == -1)</p><p><b> {</b></p><p> Pop(&realPath);&l
22、t;/p><p> cur = GetTop(&realPath);</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {<
23、/b></p><p> cur = GetNext(cur);</p><p> if (cur.val == -1) </p><p><b> {</b></p><p> Pop(&realPath);</p><p> cur = GetTop(&re
24、alPath);</p><p><b> }</b></p><p><b> }</b></p><p> } while (cur.x != chukou[0] || cur.y != chukou[1]);</p><p><b> return 0;</b>
25、</p><p><b> }</b></p><p> 五.測試數(shù)據(jù)及運(yùn)行結(jié)果</p><p> 1.正常測試數(shù)據(jù)和運(yùn)行結(jié)果</p><p> 2.異常測試數(shù)據(jù)及運(yùn)行結(jié)果</p><p> 六.調(diào)試情況,設(shè)計(jì)技巧及體會(huì)</p><p><b> 1.
26、改進(jìn)方案</b></p><p> 在迷宮問題中,由于走的方向順序不同,存在著多條路徑的結(jié)果。因此就出現(xiàn)了一個(gè)最大的問題,哪條路徑最短,即求最短路徑。</p><p> 由于時(shí)間有限和難度問題,我沒能及時(shí)解決這個(gè)問題,這也是在這次的迷宮課程設(shè)計(jì)中,我唯一的不足之處。不過我并沒有放棄,課程設(shè)計(jì)結(jié)束后,我還會(huì)繼續(xù)努力,解決掉這個(gè)問題。在以后的生活中,我也會(huì)不斷督促自己,提高編程
27、能力。</p><p><b> 2.體會(huì)</b></p><p> 剛開始,頭腦里沒有任何思路,不知道如何下手,經(jīng)過仔細(xì)研讀課本和上網(wǎng)查資料后,終于有了思緒。先將整個(gè)程序劃分為三個(gè)大模塊:主模塊,棧模塊和迷宮模塊。然后再依次實(shí)現(xiàn)每個(gè)大模塊中的小操作。最后將所有的程序拼接起來,進(jìn)行調(diào)試。</p><p> 我覺得所有模塊中最難編的就是查找
28、迷宮路徑函數(shù),經(jīng)過苦思冥想,再加上老師和同學(xué)的幫助,總算做出來了,但是非常復(fù)雜。在編譯的過程中總會(huì)出現(xiàn)五花八門的錯(cuò)誤,比如:從文件里讀不出信息,又或者是存不進(jìn)去文件,或者是亂碼等。后來才發(fā)現(xiàn)原來是源文件中存的信息類型和程序中定義的類型不匹配,經(jīng)過改正之后果然正確了。改正完后,當(dāng)把所有的小塊連接在一起時(shí),雖然沒有錯(cuò)誤,但是總有許多警告語句,運(yùn)行的結(jié)果也不盡人意。通過上網(wǎng)查資料后,發(fā)現(xiàn)這都是一些格式問題??磥砭幊谈袷胶苤匾?!經(jīng)過兩個(gè)星期的
29、上機(jī)實(shí)踐學(xué)習(xí),我才發(fā)現(xiàn)我的C語言上機(jī)實(shí)踐能力還有待加強(qiáng),有待進(jìn)步。以后不但要重視課本與習(xí)題,更要重視上機(jī)實(shí)踐。</p><p><b> 七.參考文獻(xiàn)</b></p><p> 1. 耿國華主編,《數(shù)據(jù)結(jié)構(gòu)——C語言描述》,高等教育出版社,2005年</p><p> 2. 陳銳,《數(shù)據(jù)結(jié)構(gòu)(C語言版)》,清華大學(xué)出版社 2012年<
30、;/p><p><b> 八.附錄</b></p><p> #include <stdio.h> </p><p> #include <stdlib.h></p><p> #include <string.h></p><p> #define M
31、11//迷宮行數(shù)</p><p> #define N 10//迷宮列數(shù)</p><p> #define STACK_INIT_SIZE 100</p><p> #define STACKINCREMENT 10</p><p> char Maze[M][N]={0};//迷宮</p><p>
32、char s[M][N]={0};//迷宮路線圖</p><p> int rukou[2],chukou[2];</p><p><b> //定義棧元素類型</b></p><p> typedef struct</p><p><b> {</b></p><p
33、> int x;//x坐標(biāo)</p><p> int y;//y坐標(biāo)</p><p> char val;//Maze[x][y]的值</p><p> }MStackElem;</p><p><b> //定義棧</b></p><p> typedef struct&
34、lt;/p><p><b> {</b></p><p> MStackElem * base;</p><p> MStackElem * top;</p><p> int StackSize;</p><p><b> }MStack;</b></p>
35、<p><b> //初始化棧</b></p><p> InitStack(MStack *S) </p><p><b> {</b></p><p> S->base = (MStackElem *)malloc(STACK_INIT_SIZE * sizeof(MStackElem));
36、</p><p> if (!S->base)</p><p><b> {</b></p><p> printf("初始化棧失敗!\n");</p><p> exit(-1);//存儲(chǔ)分配失敗</p><p><b> }</b>&
37、lt;/p><p> S->top = S->base;</p><p> S->StackSize = STACK_INIT_SIZE;</p><p><b> }</b></p><p><b> //入棧</b></p><p> Push(M
38、Stack *S,MStackElem e) </p><p><b> {</b></p><p> //向棧中添加元素前先判斷棧是否還有空間容納新元素</p><p> if (S->top - S->base >= S->StackSize)//棧滿,追加元素</p><p><
39、;b> { </b></p><p> S->base = (MStackElem *)realloc(S->base, (STACK_INIT_SIZE+STACKINCREMENT) * sizeof(MStackElem));</p><p> if (!S->base)</p><p><b> {<
40、;/b></p><p> printf("空間不足,入棧失敗!\n");</p><p> exit(-1);//存儲(chǔ)分配失敗</p><p><b> }</b></p><p> S->top = S->base + S->StackSize; //因?yàn)槭侵匦路?/p>
41、配了空間,所以base的值其實(shí)已經(jīng)改變,所以top的值也就相應(yīng)的改變,才能指向新的迷宮棧</p><p> S->StackSize += STACKINCREMENT;</p><p><b> } </b></p><p> *(S->top++) = e;//將新元素加到棧頂</p><p>&
42、lt;b> }</b></p><p><b> //獲得棧頂元素</b></p><p> MStackElem GetTop(MStack *S) </p><p><b> {</b></p><p> if (S->top == S->base)<
43、;/p><p><b> {</b></p><p> printf("\n對(duì)不起,沒有出路!\n\n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b&g
44、t; else</b></p><p> return *(S->top - 1);</p><p><b> }</b></p><p><b> //出棧</b></p><p> Pop(MStack *S)</p><p><b>
45、; {</b></p><p> //若棧不為空,則刪除s的棧頂元素</p><p> if (S->top == S->base)</p><p><b> {</b></p><p> printf("棧為空,出棧失敗!\n");</p><p
46、><b> exit(0);</b></p><p><b> }</b></p><p><b> else </b></p><p> --(S->top);</p><p><b> }</b></p><p
47、> MStack realPath,path;//構(gòu)造兩個(gè)棧,一個(gè)用來保存探索中的全部路徑,一個(gè)用來保存有效路徑</p><p> //判斷當(dāng)前位置是否走過</p><p> int UnPass(MStack path,MStackElem cur)//這里不能傳path的地址,否則在遍歷過程中它的top值就被改了</p><p><b>
48、; {</b></p><p> int flag = 1;//未走過</p><p> while(path.top != path.base)</p><p><b> {</b></p><p> MStackElem e = *(path.top - 1);</p><
49、p> if (e.x == cur.x&& e.y == cur.y)</p><p> flag = 0;//曾走過</p><p> (path.top)--;//每循環(huán)一次令頭指針下移一個(gè)位置</p><p><b> }</b></p><p> return flag;<
50、;/p><p><b> }</b></p><p> //獲得東面(即右邊)相鄰的位置</p><p> MStackElem GetEast(MStackElem cur)</p><p><b> {</b></p><p> if(cur.y != N-2)/
51、/當(dāng)y==N-2時(shí)已到了迷宮右邊界,不能再向東(右)行了</p><p><b> { </b></p><p> cur.y += 1;</p><p> cur.val = Maze[cur.x][cur.y];</p><p><b> } </b></p><p
52、> return cur;//當(dāng)y==N-2時(shí)返回的是它本身 </p><p><b> } </b></p><p> //獲得南面(即下邊)相鄰的位置</p><p> MStackElem GetSouth(MStackElem cur)</p><p><b> {</b>
53、</p><p> if(cur.x != M-2)//當(dāng)x==M-2時(shí)已到了迷宮下邊界,不能再向南(下)行了</p><p><b> {</b></p><p> cur.x += 1;</p><p> cur.val = Maze[cur.x][cur.y];</p><p>
54、<b> }</b></p><p> return cur;//當(dāng)x==M-2時(shí)返回的是它本身</p><p><b> }</b></p><p> //獲得西面(即左邊)相鄰的位置</p><p> MStackElem GetWest(MStackElem cur)</p&
55、gt;<p><b> {</b></p><p> if(cur.y != 1)//當(dāng)y==1時(shí)已到了迷宮左邊界,不能再向西(左)行了</p><p><b> {</b></p><p> cur.y -= 1;</p><p> cur.val = Maze[cur
56、.x][cur.y];</p><p><b> }</b></p><p> return cur;//當(dāng)y==1時(shí)返回的是它本身</p><p><b> }</b></p><p> //獲得北面(即上邊)相鄰的位置</p><p> MStackElem
57、GetNorth(MStackElem cur) </p><p><b> {</b></p><p> if(cur.x != 1)//當(dāng)cur.x==1時(shí)表示在迷宮的上邊界,不能再向北(上)行了</p><p><b> { </b></p><p> cur.x -= 1;<
58、;/p><p> cur.val = Maze[cur.x][cur.y];</p><p><b> }</b></p><p> return cur;//當(dāng)cur.x==1時(shí)返回的還是它本身</p><p><b> }</b></p><p> //獲得下一個(gè)
59、可通行的位置,按東南西北(即順時(shí)針)的方向試探</p><p> MStackElem GetNext(MStackElem cur) </p><p><b> {</b></p><p> MStackElem next;</p><p> next.x = next.y=next.val = -1;<
60、/p><p> if(GetEast(cur).val == ' ' && UnPass(path,GetEast(cur))) </p><p> next = GetEast(cur);</p><p> else if(GetSouth(cur).val == ' ' && UnPass(pat
61、h,GetSouth(cur))) </p><p> next = GetSouth(cur);</p><p> else if(GetWest(cur).val == ' ' && UnPass(path,GetWest(cur))) </p><p> next = GetWest(cur);</p>&l
62、t;p> else if(GetNorth(cur).val == ' ' && UnPass(path,GetNorth(cur))) </p><p> next = GetNorth(cur); </p><p> return next;//如果當(dāng)前位置的四面或?yàn)閴蛞炎哌^,則返回的next的val值為-1</p><
63、;p><b> }</b></p><p> //獲得迷宮路徑的函數(shù)</p><p> int GetMazePath()</p><p><b> {</b></p><p> MStackElem start,cur; </p><p> start.
64、x = rukou[0];</p><p> start.y = rukou[1];</p><p> start.val = Maze[rukou[0]][rukou[1]];//入口坐標(biāo)的值</p><p> cur = start; //設(shè)定當(dāng)前位置為"入口位置"</p><p><b> do
65、</b></p><p> { </p><p> if (UnPass(path,cur))//如果當(dāng)前位置未曾走到過</p><p><b> {</b></p><p> Push(&r
66、ealPath,cur);</p><p> Push(&path,cur);</p><p> cur = GetNext(cur);</p><p> if (cur.x == chukou[0] && cur.y == chukou[1])//到達(dá)出口</p><p><b> { <
67、/b></p><p> Push(&realPath,cur);//把出口結(jié)點(diǎn)放入路徑中</p><p> Push(&path,cur);</p><p><b> return 1;</b></p><p><b> }</b></p><p
68、> else if(cur.val == -1)//當(dāng)前位置的四面都為墻</p><p><b> {</b></p><p> Pop(&realPath);//刪除真實(shí)路徑的棧頂元素</p><p> cur = GetTop(&realPath);//令cur指向棧頂元素</p><
69、;p><b> }</b></p><p><b> }</b></p><p> else//如果當(dāng)前位置已經(jīng)走過,說明原來測試的方向不對(duì),現(xiàn)在嘗試其它方向</p><p><b> {</b></p><p> cur = GetNext(cur);<
70、;/p><p> if (cur.val == -1) </p><p><b> {</b></p><p> Pop(&realPath);//仍不通,刪除真實(shí)路徑的棧頂元素</p><p> cur = GetTop(&realPath);//令cur指向棧頂元素</p>&
71、lt;p><b> }</b></p><p><b> }</b></p><p> } while (cur.x != chukou[0] || cur.y != chukou[1]);</p><p><b> return 0;</b></p><p>&
72、lt;b> }</b></p><p><b> //輸出迷宮路徑</b></p><p> PrintMazePath(MStack *S)//為了安全,這里不傳MStack的地址,以防在遍歷的過程中把它們的top或base的值也修改了 </p><p><b> {</b></p&g
73、t;<p> MStackElem e;</p><p><b> int i,j;</b></p><p> for(i=0;i<M;i++)</p><p> for(j=0;j<N;j++)</p><p> s[i][j]=Maze[i][j];</p><
74、p> while (S->base < (S->top-1)) </p><p><b> {</b></p><p> e = *(S->base);//先指向棧底元素,以后依次向上增1</p><p> s[e.x][e.y]='.';</p><p> pr
75、intf("(%d,%d) -----> ",e.x,e.y);</p><p> (S->base)++;</p><p><b> }</b></p><p> //最后一個(gè)結(jié)點(diǎn)沒有后繼,所以不再輸出"------>" </p><p> e = *(
76、S->base);</p><p> s[e.x][e.y]='.';</p><p> printf("(%d,%d)",e.x,e.y);</p><p><b> }</b></p><p> //打開文件,獲取迷宮</p><p> Op
77、enFile() </p><p><b> { </b></p><p><b> FILE *fp;</b></p><p> int i,j,c;</p><p> system("cls");</p><p> if((fp=fopen(
78、"in.txt","rt"))==NULL)//打開迷宮文件in.txt</p><p><b> {</b></p><p> printf("打開文件失??!\n");</p><p><b> exit(1);</b></p><p
79、><b> }</b></p><p> for(i=0;i<M;i++)//將文件中的迷宮存放到Maze[][]中</p><p> {for(j=0;j<N;j++)</p><p> fscanf(fp,"%c",&Maze[i][j]); </p><p>
80、; fscanf(fp,"%c",&c);//換行</p><p><b> }</b></p><p> fclose(fp);</p><p><b> } </b></p><p><b> //保存迷宮路線圖</b></p&
81、gt;<p> SaveFile()</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p><b> int i,j;</b></p><p> char str[M][N+1];</p>
82、;<p> for(i=0;i<M;i++)</p><p><b> {</b></p><p> for(j=0;j<N;j++)</p><p> str[i][j]=s[i][j];</p><p> str[i][j]='\n';</p><
83、;p><b> }</b></p><p> str[M-1][N]='\0';//結(jié)束符</p><p> if((fp=fopen("out.txt","wt"))==NULL)</p><p><b> { </b></p><
84、;p> printf("存儲(chǔ)文件失敗!\n");</p><p><b> exit(1);</b></p><p><b> }</b></p><p> fputs(str,fp);//保存文件</p><p> printf("\n迷宮文件保存
85、成功,文件名為: out.txt。\n\n");</p><p> system("pause");</p><p> fclose(fp);</p><p><b> }</b></p><p><b> //輸出迷宮</b></p><p
86、><b> Print1()</b></p><p><b> {</b></p><p><b> int m,n;</b></p><p> printf("\n迷宮('#'代表墻即不通,' '代表通路即可通過)\n\n");<
87、;/p><p> for(m=0;m<M;m++) </p><p><b> {</b></p><p> printf("\t\t");</p><p> for(n=0;n<N;n++) </p><p> printf("%c ",
88、Maze[m][n]);</p><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p><b> //輸出迷宮路線圖</b></p><p><
89、b> Print2()</b></p><p><b> {</b></p><p><b> int m,n;</b></p><p> printf("\n迷宮路線如下:\n'#'代表不通即墻,' '代表通路即可通過,'.'代表行走路線
90、,'>'代表入口,'<'代表出口.\n\n");</p><p> s[rukou[0]][rukou[1]]='>';//入口標(biāo)志</p><p> s[chukou[0]][chukou[1]]='<';//出口標(biāo)志</p><p> for(m=0;m&
91、lt;M;m++)</p><p><b> {</b></p><p> printf("\t\t");</p><p> for(n=0;n<N;n++) </p><p> printf("%c ",s[m][n]);</p><p>
92、 printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p><b> //菜單函數(shù)</b></p><p><b> Menu()</b></p>&
93、lt;p><b> {</b></p><p> printf("\t\t******************************************\n"); </p><p> printf("\t\t*** 歡迎進(jìn)入課程設(shè)計(jì) ***\n"
94、);</p><p> printf("\t\t*** 迷宮求解程序 ***\n");</p><p> printf("\t\t*** ***\n");</p><p> printf("\t\t
95、*** 1.顯示迷宮 ***\n");</p><p> printf("\t\t*** 2.進(jìn)入迷宮 ***\n");</p><p> printf("\t\t*** 3.打印迷宮 ***\n&quo
96、t;);</p><p> printf("\t\t*** 0.退出迷宮 ***\n");</p><p> printf("\t\t******************************************\n");</p><p><b> }<
97、;/b></p><p><b> Flower()</b></p><p><b> {</b></p><p> printf("\t {@}\n");</p><p> printf("\t {@} * {@}\n"
98、;);</p><p> printf("\t {@} * {@} * {@}\n");</p><p> printf("\t{@}* {@} * {@} * {@}\n");</p><p> printf("\t \\ {@} * {@} * {@} \/\n");</p>&
99、lt;p> printf("\t \\ \\ \\ l \/ \/ \/\n");</p><p> printf("\t \\\\ \\ Y \/ \/\/\n");</p><p> printf("\t \\\\ l \/\/\n");</p><p> pri
100、ntf("\t \\\\Y\/\/\n");</p><p> printf("\t >=<\n");</p><p> printf("\t \/\/*\\\\\n\n");</p><p><b> }</b></
101、p><p><b> //主函數(shù)</b></p><p> int main() </p><p><b> { </b></p><p> int choice;//x[]用來輸入迷宮入口坐標(biāo),y[]用來輸入迷宮出口坐標(biāo)</p><p> OpenFile();
102、//打開迷宮文件</p><p><b> do</b></p><p><b> {</b></p><p> system("cls");//清屏</p><p> Menu();//調(diào)用菜單函數(shù)</p><p> printf(&quo
103、t;\n請輸入您的選擇: ");</p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p><p><b> case 1:</b></p>&
104、lt;p> system("cls");</p><p> Print1();//顯示迷宮</p><p> printf("\n");</p><p> system("pause");</p><p><b> break;</b><
105、/p><p> case 2://進(jìn)入迷宮</p><p> system("cls");</p><p> printf("\n請輸入入口坐標(biāo): "); </p><p> scanf("%d %d",&rukou[0],&rukou[1]);//迷宮入口
106、坐標(biāo) </p><p> printf("\n請輸入出口坐標(biāo): "); </p><p> scanf("%d %d",&chukou[0],&chukou[1]);//迷宮出口坐標(biāo)</p><p> if(rukou[0]>M-2||rukou[1]>N-2||chukou[0]>
107、;M-2||chukou[1]>N-2||rukou[0]<0||rukou[1]<0||chukou[0]<0||chukou[1]<0) </p><p> printf("輸入的入口或出口坐標(biāo)錯(cuò)誤!\n");//判斷輸入坐標(biāo)是否正確</p><p><b> else </b></p><
108、;p><b> { </b></p><p> InitStack(&realPath);</p><p> InitStack(&path); </p><p> GetMazePath();</p><p> printf("\n迷宮路徑為:\n\n");<
109、/p><p> PrintMazePath(&realPath);</p><p> getchar();</p><p><b> } </b></p><p> printf("\n\n");</p><p> system("pause"
110、);</p><p> system("cls");</p><p><b> break;</b></p><p><b> case 3:</b></p><p> system("cls");</p><p> Prin
111、t2();//顯示迷宮路線圖</p><p> printf("\n");</p><p> SaveFile();//保存迷宮路線圖</p><p><b> break;</b></p><p> case 0://退出</p><p> system(&
112、quot;cls");</p><p> printf("\n謝謝您的使用,再見!\n\n");</p><p><b> Flower();</b></p><p><b> break;</b></p><p><b> default:</
113、b></p><p> system("cls");</p><p> printf("\n抱歉,您輸入錯(cuò)誤!\n請重新輸入哦!\n\n");</p><p> system("pause");</p><p><b> }</b></p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 迷宮課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)(迷宮)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問題課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--迷宮
- 課程設(shè)計(jì)迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮求解
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)迷宮求解課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告----迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮問題
- 高級(jí)語言課程設(shè)計(jì)——迷宮實(shí)驗(yàn)報(bào)告
- 羅密歐與朱麗葉迷宮課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)--迷宮
評(píng)論
0/150
提交評(píng)論