版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮程序C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
目次
一.課程設(shè)計(jì)目的二.功能說(shuō)明三.具體設(shè)計(jì)
3.1.功能模塊設(shè)計(jì)3.1.1.主函數(shù)main()執(zhí)行流程圖3.1.2.創(chuàng)建模塊3.1.3.操作模塊3.1.4.顯示模塊3.1.5.其他模塊3.2.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.3.函數(shù)功能描述
四.程序?qū)崿F(xiàn)
4.1.源碼分析4.2.調(diào)試結(jié)果
4.3.遇到的問(wèn)題及解決4.4.時(shí)間繁復(fù)度分析4.5.算法的改進(jìn)思想
五.結(jié)束語(yǔ)六.
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
一.課程設(shè)計(jì)目的
1.理解和掌控雙向鏈表的數(shù)據(jù)結(jié)構(gòu)。
2.了解迷宮問(wèn)題的提出背景、機(jī)器窮舉法求解思路。3.運(yùn)用機(jī)器窮舉法和雙向鏈表結(jié)構(gòu)實(shí)現(xiàn)迷宮路徑的查找。4.設(shè)計(jì)實(shí)現(xiàn)一個(gè)完整的迷宮求解程序。
二.功能說(shuō)明
整個(gè)試驗(yàn)將實(shí)現(xiàn)迷宮路徑的查找,并圖形化輸出其中最短的路徑。本試驗(yàn)?zāi)_步的存放運(yùn)用雙向鏈表實(shí)現(xiàn),迷宮運(yùn)用二維數(shù)組存放。機(jī)器通過(guò)窮舉法解出迷宮的最短路徑,儲(chǔ)存在雙向鏈表中,最末輸出。整個(gè)試驗(yàn)分為以下幾個(gè)模塊:
1.創(chuàng)建模塊。本試驗(yàn)的創(chuàng)建包含兩方面,迷宮的定義和腳步的初始化。迷宮的定義通過(guò)修改二維數(shù)組實(shí)現(xiàn),最終創(chuàng)建一個(gè)確定的迷宮。腳步的初始化由程序自行完成,最終建立一個(gè)雙向鏈表的附加頭結(jié)點(diǎn)。
2.路徑查找模塊。路徑查找核心分為兩個(gè)部分:路徑查找、更優(yōu)解替換。路徑查找包括可通性檢查、腳步前進(jìn)、腳步后退三個(gè)模塊??赏ㄐ詸z查會(huì)檢查當(dāng)前腳步的四個(gè)方向是否有通路。腳步前進(jìn)可以在有通路的狀況下抵達(dá)下一個(gè)點(diǎn),并記錄在腳步雙向鏈表中。腳步后退使在當(dāng)前腳步無(wú)路的狀況下后退一步,并轉(zhuǎn)向其他方向,同時(shí)刪除鏈表中最末一個(gè)腳步。當(dāng)求出的路徑比上一次求出的路徑更短時(shí),更優(yōu)解替換將更優(yōu)解替換進(jìn)路徑存儲(chǔ)鏈表。3.輸出模塊。實(shí)現(xiàn)迷宮解的圖形化顯示和路徑的坐標(biāo)輸出。
4.其他模塊。格式化模塊,用于迷宮求解后的處理。迷宮數(shù)組改寫(xiě)模塊,根據(jù)求解的結(jié)果改寫(xiě)迷宮二維數(shù)組,以滿意最終輸出需要。
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
圖1功能模塊圖
三.具體設(shè)計(jì)
3.1.功能模塊設(shè)計(jì)
3.1.1.主函數(shù)main()執(zhí)行流程圖
程序啟動(dòng)時(shí),執(zhí)行main()函數(shù)輸出菜單。用戶依據(jù)菜單的提示輸入要執(zhí)行的功能,程序會(huì)依據(jù)用戶的選擇執(zhí)行不同的功能。程序具體功能如下:
1.自動(dòng)演示:指令1,由程序自動(dòng)生成一個(gè)迷宮,并進(jìn)行路徑求解的演示。
2.手動(dòng)迷宮:指令2,由用戶自行創(chuàng)建一個(gè)迷宮,定義迷宮的大小、外形等,程序?qū)?duì)用戶指定的迷宮進(jìn)行求解。
3.程序援助:指令3,顯示程序援助和須要信息。4.退出:指令4,退出程序。執(zhí)行流程如下列圖:
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
圖2主函數(shù)main()執(zhí)行流程圖
3.1.2.創(chuàng)建模塊
本模塊將進(jìn)行待解迷宮的創(chuàng)建。
1.在自動(dòng)演示中,機(jī)器會(huì)調(diào)用autocreat()函數(shù)自動(dòng)創(chuàng)建一個(gè)10*10的迷宮。2.在手動(dòng)迷宮中,程序會(huì)運(yùn)用creat()函數(shù),用戶可以通過(guò)指定迷宮大小m*n,輸入迷宮每一行的數(shù)據(jù)來(lái)自行創(chuàng)建迷宮。
3.1.3.路徑查找模塊
1.路徑查找。
本模塊實(shí)現(xiàn)了路徑的查找和腳步的移動(dòng)。思路是依次判斷上右下左四個(gè)方向,假設(shè)
可以通過(guò)那么前進(jìn),不可通過(guò)那么轉(zhuǎn)向下一個(gè)方向,四個(gè)方向都不可通過(guò)那么后退。
1可通性檢查。可通性檢查用來(lái)判斷指定的方向是否可以通過(guò)。需要判斷兩方面內(nèi)容,即下一點(diǎn)是否有障礙〔通過(guò)chk()函數(shù)完成〕和下一點(diǎn)是否已包含在了已有路徑之中。假設(shè)同時(shí)滿意無(wú)障礙和無(wú)包含條件,那么可以通過(guò)。否那么不能通過(guò)。2腳步前進(jìn)。下一點(diǎn)假設(shè)經(jīng)過(guò)檢查可以通過(guò),那么通過(guò)move()函數(shù)完成前進(jìn)?!扒斑M(jìn)”的實(shí)現(xiàn)有兩方面,第一方面,將新腳步納入雙向鏈表中,另一方面,在迷宮數(shù)組中將本步坐標(biāo)所指標(biāo)記為“已走”。
3腳步后退。假設(shè)本步四個(gè)方向都不能行走,那么通過(guò)back()函數(shù)退后。退后包括兩方面,一方面把鏈表中最末一個(gè)節(jié)點(diǎn)拋棄,當(dāng)前腳步指向倒數(shù)第二個(gè)節(jié)點(diǎn)。另一
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
方面,將迷宮數(shù)組中已拋棄節(jié)點(diǎn)指向的元素重新標(biāo)記為“未走”,以便進(jìn)行其他路徑的尋路操作時(shí)可以順當(dāng)通過(guò)。2.更優(yōu)解替換。
本模塊完成了更優(yōu)解的替換。當(dāng)程序查找到比已存解更短的解時(shí),將會(huì)銷(xiāo)毀已存解,并將新解作為優(yōu)解。直到最末全部的路徑都搜尋完畢,優(yōu)解所存的路徑即為最短路徑。
3.1.3.輸出模塊
輸出模塊調(diào)用outlin()函數(shù),依據(jù)不同的參數(shù)值,輸出不同的內(nèi)容。主要功能是輸出迷宮的圖形化路徑,并輸出此路徑的坐標(biāo)順次表示。
3.1.4.其他模塊
1.格式化模塊。調(diào)用formatmaze()函數(shù),初始化存儲(chǔ)迷宮的二維數(shù)組、各變量值,銷(xiāo)
毀上次求解時(shí)產(chǎn)生的雙向鏈表,釋放內(nèi)存空間。
2.迷宮數(shù)組改寫(xiě)模塊,調(diào)用revise()函數(shù),根據(jù)最終生成的最短雙向鏈表記錄的結(jié)果改寫(xiě)迷宮二維數(shù)組,以滿意最終輸出需要。
3.2.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
存儲(chǔ)腳步的雙向鏈表定義如下:typedefstructlnode{
structlnode*ne*t;structlnode*pre;int*;inty;
intstepsum;//表示當(dāng)前腳步為第幾步。intdi;//用di代表已嘗試的腳步方向。
}node,*linklist;
3.3.函數(shù)功能描述
1.autocreat()
autocreat()用以自動(dòng)生成一個(gè)10*10的迷宮。2.creat()
通過(guò)用戶輸入的數(shù)據(jù),創(chuàng)建一個(gè)指定大小為m*n,具有特定外形的迷宮。
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
3.seek()
seek()程序?yàn)槊詫m查找的核心函數(shù),通過(guò)調(diào)用chk()、move()、back()以及自身的優(yōu)解替換功能,最終求解出一個(gè)迷宮的最短路徑,存儲(chǔ)在雙向鏈表之中。此外,seek()函數(shù)還具有判斷處理非常迷宮的功能。seek()函數(shù)不同返回值的含義,返回-1無(wú)解,1正常解出,2入口和出口重合。4.chk(intdirection)
chk()函數(shù)用來(lái)判斷指定方向的可通性,并返回。返回1表示可通,返回0表示不可通。5.move(intdirection)
move()函數(shù)可以實(shí)現(xiàn)腳步向指定方向移動(dòng)。即把新的腳步納入腳步雙向鏈表中,并將maze數(shù)組中相應(yīng)的元素記錄為-1表示已走。6.back()
當(dāng)腳步的四個(gè)方向均已不能通過(guò)時(shí),調(diào)用back()函數(shù)刪除雙向鏈表的最末一個(gè)腳步,并將maze數(shù)組中相應(yīng)元素標(biāo)記為1,實(shí)現(xiàn)腳步的回退。7.revise()
運(yùn)用指針p,依據(jù)已求的的腳步,改寫(xiě)maze數(shù)組,使之滿意輸出需要。設(shè)有指針p,那么依據(jù)p-pre,p,p-ne*t三點(diǎn)所記錄的坐標(biāo),可以求出p的腳步外形,并標(biāo)記在maze[p-*][p-y]中。8.outlin()
輸出迷宮求解的結(jié)果。9.help()
help()函數(shù)用以輸出程序須要的援助信息。10.formatmaze()
初始化存儲(chǔ)迷宮的二維數(shù)組、各變量值,銷(xiāo)毀上次求解時(shí)產(chǎn)生的雙向鏈表,釋放內(nèi)存空間。
四.程序?qū)崿F(xiàn)
4.1.源碼分析
#includestdio.h#includestdlib.h#includemath.h#definema*size36#definestatusint
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
typedefstructlnode{
structlnode*ne*t;structlnode*pre;int*;inty;
intstepsum;//表示當(dāng)前腳步為第幾步。
intdi;//用di代表已嘗試的腳步方向。01234分別代表未嘗試、↑、→、↓、←。
}node,*linklist;
//全局變量開(kāi)始
linklistL,L2,p,q,g;//三個(gè)指針pqg滿意不同函數(shù)臨時(shí)指針需要node*nowstep,*laststep;
intmaze[ma*size+2][ma*size+2];//存儲(chǔ)迷宮的數(shù)組,+2是為了加圍墻。intm,n;//迷宮行、列數(shù)變量
inte*it*,e*ity,entrance*,entrancey;//出入口。。*y分別代表行列.
intfinish=0;//走迷宮的最終全局結(jié)果。1有路,-1無(wú)路,2出入口重合。
inte*istL=0;//手動(dòng)創(chuàng)建迷宮,選擇r重新創(chuàng)建迷宮,formatmaze()將格式化各變量。檢測(cè)L鏈表是否存在防止程序崩潰。
intmindistance=0;//存放求出的最短路徑的步數(shù)。
//創(chuàng)建迷宮statuscreat(){
system(cls);inti,j;charcord='a';
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
do{
if(cord=='r')
formatmaze();
printf(\n請(qǐng)輸入迷宮行、列數(shù)(最大%d*%d)。\n行:,ma*size,ma*size);scanf(%d,m);printf(列:);scanf(%d,n);
while(mma*size||nma*size||m1||n1){
printf(輸入有誤。只支持%d*%d以內(nèi)的迷宮,請(qǐng)重新輸入行列數(shù)。\n
行:,ma*size,ma*size);
}
printf(\n輸入迷宮數(shù)據(jù),0為磚頭,1為通路,數(shù)字間用空格間隔。系統(tǒng)將自動(dòng)添
scanf(%d,m);printf(列:);scanf(%d,n);
加圍墻。\n);
printf(\n\n設(shè)定出入口數(shù)學(xué)坐標(biāo)(*,y)。\n已建立%d行%d列的迷宮,坐標(biāo)應(yīng)在(1,1)
for(i=1;i=m;i++){}
printf(\n已勝利建立迷宮,圖形如下:\n);outlin();
printf(第%d行的%d個(gè)數(shù)據(jù)(共%d行):,i,n,m);for(j=1;j=n;j++)
scanf(%d,maze[i][j]);
至(%d,%d)之間。\n,m,n,n,m);
printf(設(shè)定入口坐標(biāo),格式例如1,1:);
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
while(entrance*m||entranceyn||maze[entrance*][entrancey]==0){
printf(輸入有誤,請(qǐng)檢查。坐標(biāo)應(yīng)在(1,1)至(%d,%d)之間。\n請(qǐng)重新輸入入口
坐標(biāo),格式例如1,1:,n,m);
printf(輸入出口坐標(biāo),格式例如%d,%d:,n,m);scanf(%d,%d,e*ity,e*it*);
while(e*it*m||e*ityn||maze[e*it*][e*ity]==0){
printf(輸入有誤,請(qǐng)檢查。坐標(biāo)應(yīng)在(1,1)至(%d,%d)之間。\n請(qǐng)重新輸入出口
}
scanf(%d,%d,entrancey,entrance*);
坐標(biāo),格式例如%d,%d:,m,n,n,m);
}
system(cls);
printf(\n你設(shè)定的迷宮如下:\n);maze[entrance*][entrancey]=-1;maze[e*it*][e*ity]=-2;outlin();
maze[entrance*][entrancey]=1;maze[e*it*][e*ity]=1;
printf(入口和出口分別為(%d,%d)(%d,%d)。\n鍵入y將開(kāi)始求解,鍵入r重新設(shè)定:
scanf(%d,%d,e*ity,e*it*);
,entrancey,entrance*,e*ity,e*it*);
scanf(%c%c,cord,cord);while(cord!='y'cord!='r'){}
printf(輸入有誤,請(qǐng)重新輸入:);scanf(%c%c,cord,cord);
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
}
}while(cord!='y');
//格式化迷宮。再創(chuàng)建新迷宮時(shí)用。。。formatmaze(){
if(e*istL==2){
while(L2-ne*t){}free(L2);
L2=L2-ne*t;free(L2-pre);
inti,j;
for(i=0;im+2;i++)
for(j=0;jn+2;j++)
maze[i][j]=0;
finish=0;
//以下語(yǔ)句把上次求解迷宮時(shí)建立的鏈表空間釋放。if(e*istL!=0){
while(L-ne*t){}free(L);
L=L-ne*t;free(L-pre);
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
}
}
e*istL=0;finish=0;mindistance=0;
//迷宮求解。。
statusseek(){
intallfinished=0;
if(entrance*==e*it*entrancey==e*ity)//入口和出口重合的非常狀況。
L=(linklist)malloc(sizeof(node));//建立存儲(chǔ)腳步的鏈表.L-ne*t=NULL;L-pre=NULL;L-stepsum=0;e*istL=1;
//初始化nowstep,令其在入口處。nowstep=(node*)malloc(sizeof(node));nowstep-*=entrance*;nowstep-y=entrancey;nowstep-pre=L;nowstep-ne*t=NULL;nowstep-di=0;nowstep-stepsum=1;
return2;
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
//開(kāi)始查找第一條可通路徑。
while(nowstep-*!=e*it*||nowstep-y!=e*ity)//用1234代表↑→↓←四個(gè)方向。{
if(nowstep-di==0chk(1)==1)//可通需要滿意兩個(gè)條件,下一個(gè)點(diǎn)無(wú)障礙、下一
個(gè)點(diǎn)未涌現(xiàn)在已構(gòu)建的路徑中。
move(1);
elseif(nowstep-di==1chk(2)==1)
move(2);
elseif(nowstep-di==2chk(3)==1)
move(3);
elseif(nowstep-di==3chk(4)==1)
move(4);
elseif(nowstep-*==entrance*nowstep-y==entrancey)//假如腳步停留在了入口,
說(shuō)明迷宮無(wú)解,不再查找。
//OK,查找出了第一條路徑L,說(shuō)明迷宮有解。建立L2比較路徑,嘗試查找比L更短
return-1;
else}
mindistance=laststep-stepsum;
back();//本步無(wú)路了,回退。
的路徑。
if(laststep-stepsum==abs(entrance*-e*it*)+abs(entrancey-e*ity))//假設(shè)第一條路徑與理論
最小路徑相等,那么不需要再次比較,徑直返回。
{
L2=L;revise();return1;
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
e*istL=2;
while(allfinished==0){
L2=(linklist)malloc(sizeof(node));L2-ne*t=NULL;L2-pre=NULL;L2-stepsum=0;
//將最末一個(gè)最小路徑備份到L2,繼續(xù)求解。p=L2;g=L-ne*t;
while(g){}
q-ne*t=NULL;
q=(node*)malloc(sizeof(node));q-di=g-di;
q-stepsum=g-stepsum;q-*=g-*;q-y=g-y;q-pre=p;p-ne*t=q;g=g-ne*t;p=q;
//開(kāi)始查找第二條可通路徑。
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
while(nowstep-*!=e*it*||nowstep-y!=e*ity){
if(nowstep-di==0chk(1)==1)
move(1);
elseif(nowstep-di==1chk(2)==1)
move(2);
elseif(nowstep-di==2chk(3)==1)
move(3);
elseif(nowstep-di==3chk(4)==1)
move(4);
else{
if(nowstep-stepsum==1nowstep-di==4)//第一步的四個(gè)方向也都嘗試
過(guò)了,說(shuō)明迷宮全部可能路徑都已嘗試完畢。
}
{}back();
allfinished=1;break;
if(nowstep-stepsum=mindistance)//新路徑大于舊路徑,就不要再往下嘗試?yán)?/p>
費(fèi)時(shí)間了。換其他路徑。
if(allfinished==0)//每次找到更短路徑,都要存入L2,并銷(xiāo)毀原L2釋放空間。{
mindistance=laststep-stepsum;
}
back();
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
};
}
{}free(L2);
L2=L2-ne*t;free(L2-pre);
revise();//改寫(xiě)maze數(shù)組里存儲(chǔ)的內(nèi)容,把每一步的方向信息寫(xiě)進(jìn)去,以便輸出圖形路
徑。}
return1;
statuschk(intdirection)//判斷下一個(gè)方向是否有障礙的函數(shù)。{
nowstep-di++;if(direction==1){}
elseif(direction==2){}
if(maze[nowstep-*][(nowstep-y)+1]==1)
return1;
if(maze[(nowstep-*)-1][nowstep-y]==1)
return1;
else
return0;
else
return0;
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
}
{}
elseif(direction==4){}
if(maze[nowstep-*][(nowstep-y)-1]==1)
return1;
if(maze[(nowstep-*)+1][nowstep-y]==1)
return1;
else
return0;
else
return0;
statusmove(intdirection)//假如chk函數(shù)判斷下一點(diǎn)可通,那么運(yùn)用此函數(shù)實(shí)現(xiàn)走動(dòng)。{
switch(direction){
laststep=nowstep;//將laststep指向nowstep,再建立新的nowstep,實(shí)現(xiàn)nowstep的前進(jìn)。nowstep=(node*)malloc(sizeof(node));nowstep-di=0;nowstep-ne*t=NULL;nowstep-pre=laststep;
nowstep-stepsum=laststep-stepsum+1;nowstep-*=laststep-*;nowstep-y=laststep-y;laststep-ne*t=nowstep;
maze[laststep-*][laststep-y]=-1;//用-1將maze數(shù)組中的值標(biāo)記,表示已經(jīng)走過(guò)
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
case1:nowstep-*--;break;case2:nowstep-y++;break;case3:nowstep-*++;break;case4:nowstep-y--;}
}
statusback(){nowstep=laststep;free(nowstep-ne*t);
maze[nowstep-*][nowstep-y]=1;//將maze數(shù)組中標(biāo)記的-1改為1,以便其他路徑嘗試
時(shí)可以通過(guò)。laststep=laststep-pre;nowstep-ne*t=NULL;
}
revise()//│─┌┐└┘六個(gè)符號(hào)在maze數(shù)組里分別由234567表示.{intd*,dy;p=L2-ne*t-ne*t;while(p-ne*tp-pre){d*=(p-ne*t-*)-(p-pre-*);
dy=(p-ne*t-y)-(p-pre-y);if(dy==0)
maze[p-*][p-y]=2;
elseif(d*==0)
maze[p-*][p-y]=3;
elseif(d*==1dy==1)
{
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
}
}
}
maze[p-*][p-y]=5;
else
maze[p-*][p-y]=6;
elseif(d*==-1dy==1){}
elseif(d*==1dy==-1){}
elseif(d*==-1dy==-1){}p=p-ne*t;
if(p-*==p-pre-*)
maze[p-*][p-y]=6;if(p-*==p-pre-*)
maze[p-*][p-y]=4;if(p-*==p-pre-*)
maze[p-*][p-y]=7;
else
maze[p-*][p-y]=4;
else
maze[p-*][p-y]=7;
else
maze[p-*][p-y]=5;
maze[e*it*][e*ity]=-2;maze[entrance*][entrancey]=-1;
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
//輸出迷宮的函數(shù)statusoutlin(){
printf();//開(kāi)始輸出圖形。for(j=0;jn+2;j++)
printf(%2d,j);inti,j;
if(finish==-1){}
elseif(finish==2){}
elseif(finish==1)
printf(\n\n已勝利查找出最短路徑,輸出如下:\n);printf(\n\n。。入口和出口重合了!\n);return1;
printf(\n\n沒(méi)找到路!你的迷宮有問(wèn)題...\n);return1;
printf(\n);for(i=0;im+2;i++){
printf(%2d,i);for(j=0;jn+2;j++){
switch(maze[i][j]){
case-1:printf(入);break;
C語(yǔ)言、雙向鏈表實(shí)現(xiàn)的迷宮巡徑程序,包括課程設(shè)計(jì)和全部源代碼。模塊化附說(shuō)明,方便改為其他數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
}
}
}
}
case-2:printf(出);break;case0:printf(■);break;case1:printf();break;case2:printf(│);break;case3:printf(─);break;case4:printf(┌);break;case5:printf(┐);break;case6:printf(└);break;case7:printf(┘);break;
printf(\n);
if(finish==1)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流服務(wù)合同書(shū)范本特點(diǎn)
- 經(jīng)典企業(yè)保證書(shū)案例
- 應(yīng)聘者責(zé)任承諾
- 電動(dòng)液壓車(chē)采購(gòu)協(xié)議
- 個(gè)人信譽(yù)承諾書(shū)
- 預(yù)售房屋買(mǎi)賣(mài)合同范本
- 沙石料銷(xiāo)售購(gòu)銷(xiāo)協(xié)議
- 小產(chǎn)權(quán)房房屋交易合同模板
- 廉潔招標(biāo)保證書(shū)
- 高性能筆記本采購(gòu)合同
- 環(huán)境、健康、安全施工管理體系及職責(zé)
- 三年級(jí)下學(xué)期科學(xué)教學(xué)工作總結(jié)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫(kù)
- 2024年7月國(guó)家開(kāi)放大學(xué)法學(xué)本科《知識(shí)產(chǎn)權(quán)法》期末考試試題及答案
- 建設(shè)工程計(jì)價(jià)-001-國(guó)開(kāi)機(jī)考復(fù)習(xí)資料
- 2022年全國(guó)應(yīng)急普法知識(shí)競(jìng)賽試題庫(kù)大全-中(多選題庫(kù)-共2部分-1)
- 神經(jīng)病學(xué)運(yùn)動(dòng)系統(tǒng)
- 北京市西城區(qū)2022-2023學(xué)年六年級(jí)上學(xué)期數(shù)學(xué)期末試卷(含答案)
- 2024秋期國(guó)家開(kāi)放大學(xué)本科《經(jīng)濟(jì)學(xué)(本)》一平臺(tái)在線形考(形考任務(wù)1至6)試題及答案
- 抵押貸款行業(yè)可行性分析報(bào)告
- 小品劇本《錢(qián)多多銀行》臺(tái)詞完整版今夜現(xiàn)場(chǎng)秀佟銘心
評(píng)論
0/150
提交評(píng)論